首页 > 代码库 > python的生成器

python的生成器

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 aa=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,输出1010>>> a.next()  #这时n为none,所以没有输出

这里可以在生成器挂起是发送变量给生成器

3.一个有趣的库:pipe

>>> from pipe import *>>> range(5)|add10>>> range(5)| where (lambda x:x if x>3 else 0)|add4

可以实现类似于linux管道的功能

 

 

 

参考:http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html