python中的生成器

Posted mengxiaoleng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于python中的生成器的主要内容,如果未能解决你的问题,请参考以下文章

python中的生成器和迭代器

分析 python 生成器中的内存使用情况

python中的生成器 generator

Python中的内置模块与生成器迭代器-day5

Python中的生成器

python中的生成器函数是如何工作的?