带yield的函数是一个生成器(generator),而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的。[1]
先把yield看做“return”,在程序中返回某个值,返回之后程序就不再往下运行了。
程序执行遇到yield关键字,yield返回后面的值之后,程序暂停,直到再次调用next方法或send方法。
def foo():
print("starting...") # 输出starting...
while True:
res = yield 4 # 返回4,停止运行,不赋值,res为none.
print("res:",res) # 输出res值
g = foo()
print(next(g)) # 从yield返回值,并停止
print("*"*20) # 输出20个星号
print(next(g)) # 从上次停止的地方开始运行,直到遇到yield返回停止
# out:
# starting...
# 4
# ********************
# res: None
# 4
def foo():
print("starting...") # 输出starting...
while True:
res = yield 4 # 返回4,停止运行,不赋值,res为none.
print("res:",res) # 输出res值
g = foo()
print(next(g)) # 从yield返回值,并停止
print("*"*20) # 输出20个星号
print(g.send(7)) # 从上次停止的地方开始运行,并将7赋值给res,直到遇到yield返回停止
# out:
# starting...
# 4
# ********************
# res: 7
# 4
网友评论