【发布时间】:2017-09-13 11:49:07
【问题描述】:
为什么第二个next 不返回"bye"?
def salute():
yield "hello"
yield "bye"
def greet_me():
print(next(salute()))
print(next(salute()))
greet_me()
输出:
你好
你好
【问题讨论】:
标签: python python-3.x generator
为什么第二个next 不返回"bye"?
def salute():
yield "hello"
yield "bye"
def greet_me():
print(next(salute()))
print(next(salute()))
greet_me()
输出:
你好
你好
【问题讨论】:
标签: python python-3.x generator
因为您每次调用salute() 时都会创建一个新 生成器。创建生成器 once 并 then 在其上调用 next 以获取两个 yield 以产生它们的值:
def greet_me():
gen = salute() # create the generator
print(next(gen)) # start it, goes to the first yield
print(next(gen)) # resume it, goes to second yield
现在调用greet_me 会打印出预期的结果。
【讨论】: