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方法,用于停止生成器