我读到 此处 下面的例子。
>>> def double_inputs():
... while True: # Line 1
... x = yield # Line 2
... yield x * 2 # Line 3
...
>>> gen = double_inputs()
>>> next(gen) # Run up to the first yield
>>> gen.send(10) # goes into 'x' variable
如果我对上面的理解是正确的,这似乎意味着Python实际上要等到 next(gen)
以 "奔向 "到 Line 2
在函数的主体中。换句话说,解释者将 不 开始执行函数的主体,直到我们调用了 next
.
double_inputs()
它需要等待,直到我打电话 next(gen)
还没进入循环 while True
? 正确。调用 double_inputs
从来不执行任何代码;它只是返回一个 generator
对象。 的存在。yield
在体内的表现,发现当 def
声明是 经解析的语义,改变了 def
语句来创建一个 generator
对象而非 function
对象。
该函数包含 yield
是一个发电机。
当你调用 gen = double_inputs()
你会得到一个生成器实例。你需要通过调用 next
.
所以对于你的第一个问题,是真的。当你第一次调用的时候,它的第1,2,3行是 next
.
对于你的第二个问题,我不太明白你的意思。当你定义函数的时候,Python就知道你在定义什么,它在运行的时候不需要提前看。
对于你的第三个问题,关键是 yield
关键字。