问题描述不清楚,但是我猜你是想问为什么调用3次 next(foo()) 没有输出'ok1',那是因为 foo() 返回一个新的generator对象,这个对象每次next的时候就会停在下一个yield那里,如果不保存到变量里,而是每次生成一个新的对象,那么永远没有机会执行到第二个yield。
还是不太明白 为什么next(foo()) 会是返回一个新的generrator 而不是继续执行下一步 foo() 和 变量g 有什么区别呢?
类和实例是同一个东西吗?
你应该使用next(g),因为每一次函数返回的对象都不一样。
凡是 带有yield关键字的函数就是生成器。
foo() 只是获取了一个生成器对象,并没有执行。
next(foo()) next 对生成器执行操作,直至遇到yield 停止执行。
你的 每次foo() 只是获取了一个新的生成器(并产生了一个新的名称空间)而已,并没有执行。
正确写法
g = foo() 先获得生成器对象
next(g) 执行生成器对象,直至遇到yield 停止执行
next(g) 机遇上一个操作继续执行,直至再次遇到yield停止执行
具体请看: