一、概念:生成器是特殊的迭代器,只要函数yield的函数就是生成器函数。 二、作用:可以控制一个函数的执行,让一个函数执行到yield后停止执行,并返回对应的数据;可以使用next和send函数来启动生成器,执行函数体。 三、执行过程:当第一次启动生成器函数执行时,会从函数体的开头开始执行;之后再启动时,就会从上次执行暂停的地方,也就是yield处接着执行。
1.使用next启动生成器
def create_num(all_num
):
print("-------1-------")
a
, b
= 0, 1
current_num
= 0
while current_num
< all_num
:
print("-------2-------")
yield a
print("-------3--------")
a
, b
= b
, a
+b
current_num
+= 1
print("-------4--------")
if __name__
== "__main__":
obj
= create_num
(22)
ret
= next(obj
)
print(ret
)
ret
= next(obj
)
print(ret
)
2.使用send启动生成器
def create_num(all_num
):
a
, b
= 0, 1
current_num
= 0
while current_num
< all_num
:
res
= yield a
print("res: ", res
)
a
, b
= b
, a
+b
current_num
+= 1
if __name__
== "__main__":
obj
= create_num
(2)
ret
= next(obj
)
print(ret
)
ret
= obj
.send
("传递给yield左边对象的数据")
"""
1.send启动生成器时,可以传递数据,将数据传递给yield左边的res;
2.之后继续执行yield的下一行代码,最后yield返回a的值给ret
"""
print(ret
)
3.区别:next启动时不可以传递数据给生成器函数,而send启动时可以传递数据给生成器函数。
转载请注明原文地址:https://ipadbbs.8miu.com/read-41560.html