Steven D'Aprano <[email protected]> added the comment:
This is not a bug, it is standard behaviour for all iterators, not just
generators.
For loops work by calling next() on the iterator object, if you call next() on
the same object inside the loop, that has the effect of advancing the for loop.
You say:
> I noticed that the generator function will execute whenever it is in the
> for...in loop.
but that's actually incorrect, as the generator FUNCTION f() is not inside the
for loop. Each time you call the generator function f() you get a separate,
independent generator object. In this case, you only call f() once, so you only
have one generator object `gen`. Each time next(gen) is called, it advances to
the next yield. It doesn't matter whether you call it manually, or the
interpreter calls it for you using the for loop.
Try these two examples and compare their difference:
gen = f()
for x in gen:
print(x, "outer loop")
for y in gen:
print(y, "inner loop")
versus:
for x in f():
print(x, "outer loop")
for y in f():
print(y, "inner loop")
----------
nosy: +steven.daprano
resolution: -> not a bug
stage: -> resolved
status: open -> closed
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue35725>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com