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__())
  • 相关阅读:
    jquery收集
    c#语法
    asp.net+MVC
    在线OFFICE方案
    NodeJs中require use get typescript及其他知识点集合
    $.data()
    mongodb 安装、windows服务、创建用户
    Nodejs&Express
    Nodejs + MongoDb
    Nodejs
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/9349346.html
Copyright © 2011-2022 走看看