zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    0909 初识编译原理
    校园跳蚤市场-Sprint计划
    校园跳蚤市场
    5.2-5.3
    5.1封装
    阅读2
    汉堡包
    五章-问题
    结对子作业 四则运算 V2.0
    四则运算升级版
  • 原文地址:https://www.cnblogs.com/Xjng/p/3824833.html
Copyright © 2011-2022 走看看