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

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

作者: 清水秋香 | 来源:发表于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