I read here the following example:
>>> 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
If I understand the above correctly, it seems to imply that Python actually waits until next(gen)
to "run up to" to Line 2
in the body of the function. Put another way, the interpreter would not start executing the body of the function until we call next
.
- Is that actually correct?
- To my knowledge, Python does not do AOT compilation, and it doesn't "look ahead" much except for parsing the code and making sure it's valid Python. Is this correct?
- If the above are true, how would Python know when I invoke
double_inputs()
that it needs to wait until I callnext(gen)
before it even enters the loopwhile True
?