We should cherish now

python生成器

生成器定义和运行机制:

  生成器是一种用普通的函数语法定义的迭代器,任何包含yield语句的函数成为生成器。生成器是一种函数,但是有区别普通的函数,不像一般的函数那样,使用return返回值,而是每次产生多个值。每次产生一个值使用yield语句,函数就会冻结:即函数停在那点等待下次(next或者send)被激活,函数被激活后就从停止的那点开始执行。

def flattenInt(nested):for sublist in nested:yield sublist

生成器的使用

  在python里面,当你定义了一个函数,使用了关键字yield,这个函数就是生成器,当你要返回其值的时候就需要用到next()

  

iter= flattenInt([1,[2,3,4,5],6,7,8,9])
iter.next()

列表推导式和生成器推导式

  生成器推导式(生成器表达式)跟列表推导式的工作方式类似,只不过返回的不是列表而是生成器(不会立刻进行循环),生成器表达式用的是小括号,而列表推导式用的中括号。

g=((i+2)**2 for i in range(2,27))
print g.next()

16

生成器方法(协成)

  send方法,就像next方法一样,只不过前者使用一个参数。send方法的使用只有在生成器挂起之后才有意义,也就是在生成器在第一次被执行之后。

def repeater(value):
    while True:
        new =(yield value)
        if new is not None:
            value=new
r=repeater(23)
print r.next()
#调用协成send方法之前,生成器必须先挂起,也就是先要next一下
print r.send(45)

  close方法,用于停止生成器

posted on 2014-07-19 08:24  Alai@2014  阅读(194)  评论(0编辑  收藏  举报