码迷,mamicode.com
首页 > 编程语言 > 详细

python中的生成器

时间:2019-09-22 13:08:30      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:函数   循环   info   pytho   com   bre   mamicode   n+1   ext   

生成器

列表推导: 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中的生成器

标签:函数   循环   info   pytho   com   bre   mamicode   n+1   ext   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!