python 生成器

时间:2022-08-02 16:12:02

摘自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000

前面说了列表生成式,那么生成器怎么做呢

第一种方法,因为前面我们的列表生成式是用[]表示的,所以这里我们把【】换成()就行了

生成器保存的是算法

比如说我们的列表生成式是

k = 【x*x  for  x   in   range(5)】

那么我们的生成器就是

g =(x*x   for  x   in   range(5))

我们怎么调用这个生成器中的元素呢

一个是使用next()

>>> g = (x*x for x in range(5))
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9

但是在实际生产中我们要是调用生成器中的元素的话,我们就使用for循环来迭代

g =(x*x   for  x   in   range(5))

for   i    in   g:

  print  i

还有一种方法就是在函数中定义yield关键字

这种方法就是用yield关键字了,就像高中的根据规则,推断出函数一样,我们这里只是在里面加了一个yield

比如说这里的斐波那契函数

def fib(max):

n,a,b = 0,0,1

while n < max:

#    print b

      yield b

    a,b = b,a+b

    n = n+1

小结

generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。

要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。