python生成器generator用法实例分析

874次阅读  |  发布于5年以前

本文实例讲述了python生成器generator用法。分享给大家供大家参考。具体如下:

使用yield,可以让函数生成一个结果序列,而不仅仅是一个值

例如:


    def countdown(n): 
      print "counting down" 
      while n>0: 
        yield n #生成一个n值 
        n -=1 
    >>> c = countdown(5) 
    >>> c.next() 
    counting down 
    5 
    >>> c.next() 
    4 
    >>> c.next() 
    3 

next()调用生成器函数一直运行到下一条yield语句为止,此时next()将返回值传递给yield.而且函数将暂停中止执行。再次调用时next()时,函数将继续执行yield之后的语句。此过程持续执行到函数返回为止。

通常不会像上面那样手动调用next(), 而是使用for循环,例如:


    >>> for i in countdown(5): 
    ...   print i 
    ...   
    counting down 
    5 
    4 
    3 
    2 
    1 

next(), send()的返回值都是yield 后面的参数, send()跟next()的区别是send()是发送一个参数给(yield n)的表达式,作为其返回值给m, 而next()是发送一个None给(yield n)表达式, 这里需要区分的是,一个是调用next(),send()时候的返回值,一个是(yield n)的返回值,两者是不一样的.看输出结果可以区分。


    def h(n): 
      while n>0: 
        m = (yield n) 
        print "m is "+str(m) 
        n-=1 
        print "n is "+str(n) 
    >>> p= h(5) 
    >>> p.next() 
    5 
    >>> p.next() 
    m is None 
    n is 4 
    4 
    >>> p.send("test") 
    m is test 
    n is 3 
    3 

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8