基于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+1 g=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 sys list=[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 Image im=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.height s=Screen() s.width=1024 s.height=768 print(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 @unique class Weekday(Enum): Sun=0 Mon=1py Tue=2 Wed=3 Thu=4 Fri=5 Sat=6 day1=Weekday.Mon print('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 json d=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 flask from flask import request app = 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教程