1.yield是放在函数里面的,且带有yield的函数就叫做生成器,这时函数就成了一个对象,而不能把它作为函数来对待
def foo(num):
print("introduction:")
while:
if num < 10:
num += 1
yield num
g = foo()
看上面的代码,我们把函数赋值给了g,其实就是让g成为一个生成器对象。这时就不要把g看做一个函数了。
2.yield的作用相当于一个return(简单来看),会返回一个值,同时停止所在函数的运行。如果是在循环里面,则返回一个值后,下次一循环会在上次return的地方继续开始而不是从函数的开头开始运行。
for n in g(0):
print(n)
运行上面的代码,得到的输出是从1-10,原因就在于第一次运行时计算num得到1,然后yield返回一个1并且打印出来。之后第二次循环的原因就是,g这个生成器对象中的循环还没有结束,它会在yield返回num=1后继续下一次训话,即判断num<1,继续让num+1得到num=2并返回2,所以会打印出2。如此循环知道g内部的循环结束为止。