List Comprehension
1.列表推导 [i for i in range(10) if i%2 == 0] -> [0, 2, 4, 6, 8], i也可以是一个函数,该风格比C语言思想的代码风格效率高
2.enumerate 取到了序列中的序列号好内容
for index, item in enumerate(sequence):
process(index, item)
迭代器: 要创建定制的迭代器,可以编写一个具有next方法的类,只要该类能够提供返回迭代器实例(self)发__iter__特殊方法
基于方法:next 返回容器的下一个项目 i.next()
__iter__ 返回迭代器本身 i = iter('abc')
生成器:基于yield指令,可以暂停一个函数并返回中间结果,该函数将保存执行环境并可以在必要时恢复,不能有return,yield这与return的情况不同。return是真正的离开代码块,所以会在return时立刻执行finally子句而yield不会。
yield将返回一个generator对象,为一个特殊的迭代器
send,send的工作机制与next一样,但yield将变成能够返回传入的值, 实例.send("***") value = (yield) 可以根据客户端代码来改变其行为
throw,close 实例.throw() 传入要抛出的任何类型的异常 这个方法用于关闭生成器。对关闭的生成器后再次调用next或send将抛出StopIteration异常。
协同程序(Trampoline, multitask, cintextlib, greenlet):可以挂起/恢复,并且有多个进入点的函数,类似线程,但不用资源锁,生成器几乎就是协调程序
生成器表达式:(x**2 for x in range(10) if x%2 == 0)
好文介绍:http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html
itertools模块:包括islice,tee,groupby模式
装饰器:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html
包括编写装饰器,参数检查,缓存,代理,上下文提供者
with和contextlib
举例: with file('path') as hosts:
........
可替代:
hosts = file('path')
try:
.......
finally:
hosts.close()
Python类:
避免多重继承
super必须使用一致,都是用super或不是用super
不要混用老式和新式类
调用父类时必须检查类层次
类描述符:自定义在引用一个对象上的特性时所应完成的事情
描述符类必须实现三个方法:
__set__,__get__, __delete__