zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    Bootstrap-table一个表格组件神器(学习二)实战
    JS基础_for循环练习3
    JS基础_for循环练习2
    JS基础_for循环练习1
    JS基础_for循环
    JS基础_while的练习2
    JS基础_while的练习1
    JS基础_while循环
    JS基础_条件分支语句:switch语句
    JS基础_if注意问题
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11566822.html
Copyright © 2011-2022 走看看