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
    
    
  • 相关阅读:
    单例模式
    建造者模式
    工厂模式
    八大排序算法之插入排序
    八大排序算法之基数排序
    lua 4 使用table实现其他数据结构,并介绍遍历方法
    lua 3 循环
    lua 2 变量
    lua 1 基本语法和注意事项
    template指针小测试
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11566822.html
Copyright © 2011-2022 走看看