pyhotn3入门基础-11 生成器

来源:互联网 发布:青果教育网络管理系统 编辑:程序博客网 时间:2024/06/05 03:25

创建生成器

创建Lg的区别仅在于最外层的[]()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 0x000000000315B200>

通过next()函数获得generator的下一个返回值

>>> next(g)0>>> next(g)1

调用next到没有元素的时候,会有StopIteration的错误

循环打印

>>> g = (x * x for x in range(10))>>> for n in g:...     print(n)... 0149162536496481


斐波拉契数列 1,1,2,3,5,8,13,21,34,....
def fib(max):    n, a, b = 0, 0, 1    while n < max:        print(b)        a, b = b, a + b        n = n + 1    return 'done'

a, b = b, a + b
相当于:

t = (b, a + b) # t是一个tuple 元组a = t[0]b = t[1]

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

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

>>> f = fib(6)>>> f<generator object fib at 0x104feaaa0>

generator的函数,每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行














原创粉丝点击