列表生成式和列表生成器

生成式:

L = [x * x for x in range(10)] 占用运行内存

生成器:

g = (x * x for x in range(10)) 占用时间

# 第一种写法
 g = (x * x for x in range(10))
for n in g:
...     print n
# 第二种写法
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。类似于debug的断点执行

猜你喜欢

转载自blog.csdn.net/qq_41768400/article/details/80564188