我阅读了here以下示例:
>>> 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
。换句话说,解释器将not开始执行函数的主体,直到我们调用next
。
double_inputs()
时,Python将如何知道它需要等到我调用next(gen)
才能进入循环while True
? 正确。调用double_inputs
永远不会执行任何代码。它只是返回一个generator
对象。当yield
语句为parsed时发现的def
表达式在正文中的存在会更改def
语句的语义,以创建generator
对象而不是function
对象。