python中的生成器

生成器

列表推导: L = [x * x for x in range(10)] 可创建一个列表

  • 内存限制,列表容量有限
  • 例如,创建包含100万个元素的列表L= [x * x for x in range(1e6)],不仅占用很大存储空间,如果仅访问前面几个元素,大多数元素占用的空间被浪费
  • 列表元素按照某种算法推算出来,在循环的过程中
    不断推算出后续元素?
  • 生成器(generator):延迟计算,不立刻产生结果

生成器创建

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

生成器调用

生成器保存的是算法,访问生成器中的元素:

每次调用next( ),计算下一个元素

访问生成器

使用for...in进行迭代

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

for item in g:
    print(item)

生成器函数

其多次返回值,其实就是一个返回生成器的函数

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

g=fib(5)
next(g)
next(g)
next(g)
next(g)
next(g)

g=fib(10)

for item in g:  
    print(item)

g=fib(20)

while True:
    try:
        x=next(g)
        print('g: ',x)
    except StopIteration as e:
        print('Generation return value: ',e.value)
        break

原文地址:https://www.cnblogs.com/mengxiaoleng/p/11566822.html