美文网首页
生成器推导式、生成器函数

生成器推导式、生成器函数

作者: 清水秋香 | 来源:发表于2020-02-22 02:30 被阅读0次
    什么是生成器:

    生成器是用来创建数据序列的一种对象
    使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列
    通常生成器是为迭代器产生数据的 --迭代器的一种实现

    生成器推导式

    与推导式语法一样
    (<表达式> for <变量> in <可迭代对象> if <逻辑条件>)
    返回一个生成器对象,也是可迭代对象
    但生成器并不立即产生全部元素,仅在用到元素的时候才生成,可以极大节省内存

    >>> agen = (x*x for x in range(10))
    >>> next(agen)
    0
    >>> for i in agen:
    ...     print(i)
    ... 
    1
    4
    9
    16
    25
    36
    49
    64
    81
    >>> 
    
    生成器函数

    如果创建一个比较大的序列,生成器推导式将会比较复杂,一行表达式无法容纳,这是可以定义生成器函数。
    生成器函数与普通函数:
    生成器函数定义与普通函数相同,只是将return换成了yield

    • yield与return
      1⃣️yield语句
      立即返回一个值
      下次迭代生成器函数时,从yield语句后的语句继续执行,直到再次yield返回,或终止
      2⃣️return语句
      终止函数的执行,下次调用会重新执行函数

    • 协同程序
      可以运行的独立函数调用,函数可以暂停或挂起,并在需要的时候从离开的地方继续或重新开始。

    >>> def even_number(max):
    ...     n=0
    ...     while n < max:
    ...             yield n
    ...             n+=2
    ... 
    >>> a = even_number(10)
    #第一次取出的是0
    >>> next(a)
    0
    #第二次取数时,会从n += 2 开始执行 给n赋值为2 进入循环 在yield出来 等待下次取数时再次执行。
    >>> next(a)
    2
    >>> for i in a:
    ...     print(i)
    ... 
    4
    6
    8
    >>> 
    

    相关文章

      网友评论

          本文标题:生成器推导式、生成器函数

          本文链接:https://www.haomeiwen.com/subject/goykqhtx.html