什么是生成器:
生成器是用来创建数据序列的一种对象
使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列
通常生成器是为迭代器产生数据的 --迭代器的一种实现
生成器推导式
与推导式语法一样
(<表达式> 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
>>>
网友评论