20221123
为什么引入yield
- 节省内存,即用即取
每次调用,执行到yield行return一个值,停止运行函数。下次调用,从yield的下一行接着执行。
def foo():
print("starting...")
while True:
print('start')
res = yield 4
print("res:",res)
g = foo()
print('first step')
print(next(g))
print("*"*20)
output:
first step
starting...
start
4
********************
print(next(g))
res: None
start
4
print(g.send(7))
res: 7
start
4
from inspect import isgeneratorfunction
print(isgeneratorfunction(foo()))
print(isgeneratorfunction(foo))
False
True
要注意区分 foo 和 foo(),foo 是一个 generator function,而 foo() 是调用 foo 返回的一个 generator
参考:
[1] https://www.runoob.com/w3cnote/python-yield-used-analysis.html
[2] https://blog.csdn.net/mieleizhi0522/article/details/82142856#:~:text=yield是一个常用于,,迭代器,生成器。