首先,拿好宝剑: 先把yield看做“return”,
普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。
看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器),
返回的不是一个函数的输出,是一个生成器的结果,这样直到这个生成器全部执行完
好了,带着宝剑继续看:
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("-" * 20)
print(next(g))
代码输出:
starting...
4
--------------------
res: None
4
按顺序逐句解释,你绝对就清楚明白,独步天下了:
1.程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象) 。
===》获得技能:yield和函数区别?怎么使用?(有yield的函数就不是函数了,是生成器,不会随意执行,想执行,要么您调用next 要么调用send方法,要么您遍历)