I read here https://stackoverflow.com/questions/19302530/python-generator-send-function-purpose/60042174?noredirect=1#comment109042384_60042174下面的例子:
>>> 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
.
- 这实际上是正确的吗?
- 据我所知,Python 不进行 AOT 编译,并且除了解析代码并确保它是有效的 Python 之外,它不会“向前看”太多。它是否正确?
- 如果上述情况成立,Python 如何知道我何时调用
double_inputs()
需要等到我打电话next(gen)
在它进入循环之前while True
?
正确的。呼唤double_inputs
从不执行任何代码;它只是返回一个generator
目的。的存在yield
当体内的表达def
声明是parsed,改变了语义def
语句来创建一个generator
对象而不是function
object.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)