zoukankan      html  css  js  c++  java
  • 迭代器、生成器

    1.列表生成式

    In [3]: arr = [i*10 for i in range(10)]

    In [4]: arr
    Out[4]: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

    2.生成器

    对于arr = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]这种每个元素都可以根据某种算法推算出来,没有必要占用内存空间。

    一遍循环,一遍计算--生成器(generator)

     创建generator:

    方法一:把[]换成()   ,只能用一次,用于迭代

    In [12]: arr = (i*10 for i in range(10))
    
    In [13]: for i in arr:
        ...:     print(i, end=',')
    0,10,20,30,40,50,60,70,80,90,
    In [14]: for i in arr:
        ...:     print(i, end=',')
    
    In [15]:

    方法二:使用函数作为算法,yield

    当调用f.__next__()时,才会执行fib方法,执行到yield时会停下来,并返回结果。下一次调用f.__next__()时,会从上次的yield开始,继续执行,并且保存了运行环境

    def fib(max):
        n, a, b = 0, 0, 1
        while max > n:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'
    
    if __name__ == '__main__':
        f = fib(3)
        print(f)
        print(f.__next__())
        print(',')
        print(f.__next__())
        print(',')
        print(f.__next__())
  • 相关阅读:
    IEnumerable、IEnumerator接口(如何增加迭代器功能)
    IConvertible接口
    IComparable和IComparer接口
    c#-泛型、协变、逆变
    MVC-HtmlHelper扩展
    .Net反射-TypeDescriptor
    MVC Core 使用TagHelper扩展几个插件
    js日志组件封装
    js预解析
    js代码优化
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/9349346.html
Copyright © 2011-2022 走看看