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 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

posted @ 2014-07-04 17:47  Xjng  阅读(686)  评论(0编辑  收藏  举报