1.生成器
>>> def func1(): ... yield 0 ... yield 1 ... >>> a=func1() >>> a.next() 0 >>> a.next() 1 >>> a.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
当函数中有yield字段,就代表这是个生成器,生成器运行到yield字段时就会挂起,并返回yield后面的值,当运行a.next()时,函数会再次启动。
所以yield类似于return,只不过一个函数可以有多个yield,而且可以返回多个yield,而不像return一样,return完一个值,函数就结束了。
def f():
a=1
while 1:
a=a+1
yield a
a=f()
for i in a:
if i > 100:break
print i
2..发送数据给生成器
>>> def f(): ... n=1 ... while 1: ... n=(yield n) ... >>> a=f() >>> a.next() 1 >>> a.next() #这时n为none,所以没有输出 >>> a.send(10) #这时n为10,输出10 10 >>> a.next() #这时n为none,所以没有输出
这里可以在生成器挂起是发送变量给生成器
3.一个有趣的库:pipe
>>> from pipe import * >>> range(5)|add 10 >>> range(5)| where (lambda x:x if x>3 else 0)|add 4
可以实现类似于linux管道的功能
参考:http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html