python生成器

来源:互联网 发布:手机视频捕捉软件 编辑:程序博客网 时间:2024/05/22 09:47

运用列表生成式可以快速生成list:

    >>>[x * x for x in range(1, 11) if x % 2 == 0]          [4, 16, 36, 64, 100]

在Python中, 这种一边循环一边计算的机制, 称为生成器(Generator),
创建 L 和 g 的区别仅在于最外层的 [] 和 () , L 是一个list, 而 g 是一个generator :

    >>> L = [x * x for x in range(10)]    >>>> L    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]    >>> g = (x * x for x in range(10))    >>> g    <generator object <genexpr> at 0x104feab40>

我们可以直接打印出list的每一个元素,打印出generator的每一个元素可以通过generator的 next() 方法,这种不断调用 next() 方法实在是太变态了, 正确的方法是使用for循环,因为generator也是可迭代对象。

定义generator的另一种方法,如果一个函数定义中包含 yield 关键字,那么这个函数就不再是一个普通函数,而是一个generator:

    def fib(max):        n, a, b = 0, 0, 1        while n < max:            yield b            a, b = b, a + b            n = n + 1

generator和函数执行流程不一样。函数是顺序执行,遇到return语句或者最后一条语句就返回,而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处执行。

原创粉丝点击