【笔记】Python3.X笔记

来源:互联网 发布:国家商品诚信数据库 编辑:程序博客网 时间:2024/05/16 03:20

基于Python3.X版本进行学习,笔记如下:

杨辉三角

def triangle(max):    L=[1]    n=1    while n<=max:        yield L        L.append(0)        L=[L[i-1]+L[i] for i,x in enumerate(L)]        n=n+1g=triangle(10)for items in g:    print(items)

名字格式化

def rightname(name):    return name[0].upper()+name.lower()[1:]print(list(map(rightname,['admin','LISA','barT'])))

迭代器

两个基本的方法:iter()和next()

import syslist=[1,2,3,4]it=iter(list)
while True:    try:        print (next(it))    except StopIteration:        sys.exit()

生成器

py中使用了yield的函数被称为生成器generator

生成器只能用于迭代操作,简单说来,生成器就是一个迭代器

在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存

当前所有的运行信息,返回yield的值,

并在下一次执行next()方法时从当前位置继续执行。

排序

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]def by_name(t):    return t[1]L2=sorted(L,key=by_name,reverse=True)print(L2)

模块

在Python中,一个.py文件就称为一个模块(module)

当一个模块编写完毕,就能被其他地方引用,模块还包括

Python内置模块和来自第三方的模块。

包:

按目录来组织模块的方法。例如新建一个顶层包

mypackage,abc.py模块的名字就变成了mypackage.abc

注意:每一个包目录下面都会有一个init.py的文件,这个文件必须存在,否则Python将把这个目录当成

普通目录,而不是一个包。init.py可是一个空文件。

在包下可有多级目录。如mypackage.web.www

命名注意:自己的模块命名时不要和Python的内置模块冲突。

第三方模块使用-PIL

from PIL import Imageim=Image.open('test.png')print(im.format,im.size,im.mode)im.thumbnail((200,100))im.save('thumb.jpg','JPEG')

class Student(object):    """docstring for Student"""    def __init__(self, name,score):        self.name = name        self.score=score    def print_score(self):            print('%s: %s' % (self.name,self.score))bart=Student('Bart Simpson',59)lisa=Student('lisa Simpson',69)bart.print_score()lisa.print_score()

继承与多态

继承
可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只要新增自己特有的方法,也能够把
父类不适合的方法覆盖重写。

注意:静态语言与动态语言的继承体系。动态语言——“鸭子类型”——”file-like object”

使用@property属性

class Screen(object):    @property    def width(self):        return self._width    @width.setter    def width(self,value):        self._width=value    @property    def height(self):        return self._height    @height.setter    def height(self,value):        self._height=value    @property    def resolution(self):        return self.width * self.heights=Screen()s.width=1024s.height=768print(s.resolution)print(s.width)

链式调用

class Student(object):    """docstring for Student"""    def __init__(self, path=''):        self.__path = path    def __getattr__(self,path):        path1=self.__path+path+'/'            return Student(path1)    def __call__(self,*path):        path1=self.__path+path[0]+'/'        return Student(path1)    def __str__(self):        sum =len(self.__path)        self.__path=self.__path[:sum-1]        return self.__path    __repr__=__str__print(Student().user('Bob').repos)print(Student().status.user.timeline.list)            

枚举

from enum import Enum,unique@uniqueclass Weekday(Enum):    Sun=0    Mon=1py    Tue=2    Wed=3    Thu=4    Fri=5    Sat=6day1=Weekday.Monprint('day1=',day1)print('Weekday.Tue=',Weekday.Tue)print('Weekday[\'Tue\']=',Weekday['Tue'])print('Weekday.Tue.value=',Weekday.Tue.value)print('day1==Weekday.Mon ?',day1==Weekday.Mon)print('day1==Weekday.Mon ?',day1==Weekday.Tue)print('day1==Weekday(1) ?',day1==Weekday(1))for name,member in Weekday.__members__.items():    print(name,'=>',member)Month=Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))for name,member in Month.__members__.items():    print(name,'=>',member,',',member.value)

单元测试、文档测试

IO

(1)读取文本文件
打开f=open(‘url’,’r’);—-读f.read()将内容读到内存—-关闭

f.close()文件使用完毕后必须关闭

使用try…finally来实现文件读写

另一种方法:

with open('url','r') as f:printf(f.read())

注意所读取的文件大小

(2)读取二进制文件

f=open('url','rb')f=read()

(3)读取GBK文件

f=open('url','r',encoding='gbk',errors='ignore')f.read()

(4)写文件

f=open('url','w')f.write('str')f.close()

另一种方法:with

with open('url','w') as f:  f.write('str')

从内存中读取—StringIO和BytesIO

操作文件和目录-os模块 import os shutil模块,os模块的补充

序列化\反序列化

import jsond=dict(name='bob',age=20,score=88)print(json.dumps(d))

WSGI处理函数

def application(environ,start_response):    start_response('200 OK',[('Content-Type','text/html')])    body ='<h1>Hello,%s!</h1>' % (environ['PATH_INFO'][1:] or 'web')    return [body.encode('utf-8')]

Flask框架

!/usr/bin/env python3-*- coding: utf-8 -*-from flask import flaskfrom flask import requestapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def home():    return '<h1>Home</h1>'@app.route('/signin', methods=['GET'])def signin_form():    return '''<form action="/signin" method="post">              <p><input name="username"></p>              <p><input name="password" type="password"></p>              <p><button type="submit">Sign In</button></p>              </form>'''@app.route('/signin', methods=['POST'])def signin():    # 需要从request对象读取表单内容:    if request.form['username']=='admin' and request.form['password']=='password':        return '<h3>Hello, admin!</h3>'    return '<h3>Bad username or password.</h3>'if __name__ == '__main__':    app.run()     

异步IO—消息循环,主线程不断地重复“读取消息-处理消息”

loop=get_event_loop()  while True:    event=loop.get_event()    process_event(event)

asyncio模块-内置对异步IO的支持
改进方法——async/await(py3.5版本开始使用的新语法)

aiohttp—基于asyncio实现的HTTP框架

详细请参考:Python教程

0 0
原创粉丝点击