Python 3 生成器 ( generator )

Python 中的生成器是一个返回迭代器的函数,主要用于惰性求值

Python 将使用了 yield 的函数被称为生成器 ( generator )

跟普通函数不同的是,生成器只能用于迭代操作

调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值,并在下一次执行 next() 方法时从当前位置继续运行

下面的代码使用 yield 实现斐波那契数列

def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci( 10 ) # f 是一个迭代器,由生成器返回生成

我们可以使用 type() 函数查看 f 的类型,发现是一个生成器类

>>> f
<generator object fibonacci at 0x112a397d8>
>>> type(f)
<class 'generator'>

然后我们就可以向使用迭代器一样使用生成器 f

while True:
    e = next(f,None)
    if e:
        print (e, end=" ")
    else:
        break

运行以上 Python 代码,输出结果如下

0 1 1 2 3 5 8 13 21 34 55

简单的迭代器

我们知道下面的语句可以创建一个序列

[x*x for x in range(5)]

如果把中括号改成小括号,就会返回一个生成器了

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

演示如下

>>> x = [x*x for x in range(5)]
>>> x
[0, 1, 4, 9, 16]
>>> x = (x*x for x in range(5))
>>> x
<generator object <genexpr> at 0x112af3eb8>
>>> type(x)
<class 'generator'>

Python3 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.