【问题标题】:Next on generators doesn't resume with last call生成器上的下一个不会在上次调用时恢复
【发布时间】: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


    【解决方案1】:

    因为您每次调用salute() 时都会创建一个 生成器。创建生成器 oncethen 在其上调用 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 会打印出预期的结果。

    【讨论】:

    • 不好意思现在问:(
    • 提出问题永远不要感到难过!
    • @Oleg 同意 Rolf 的观点,我们都去过那里并感觉到 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多