接下来发电机不会在最后一次通话时恢复

Ole*_*leg 3 python generator python-3.x

为什么第二次next不回来"bye"

def salute():
    yield "hello"
    yield "bye"


def greet_me():
    print(next(salute()))
    print(next(salute()))

greet_me()
Run Code Online (Sandbox Code Playgroud)

输出:

你好

你好

Jim*_*ard 6

因为您每次打电话都要创建一个新的生成器salute().创建一次生成器,然后调用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
Run Code Online (Sandbox Code Playgroud)

greet_me现在调用打印预期结果.