Screwing Up looping in Generator
python at deborahswanson.net
Tue Jan 3 18:21:10 EST 2017
From: Matt Wheeler [mailto:m at funkyhat.org]
Sent: Tuesday, January 03, 2017 1:47 PM
To: python at deborahswanson.net; Sayth Renshaw; python-list at python.org
Subject: Re: Screwing Up looping in Generator
On Tue, 3 Jan 2017 at 20:17 Deborah Swanson <python at deborahswanson.net>
> What's the code for your generator? And I don't see where you
> call 'next'.
I think you're expecting
for file in rootobs
to get the next yield for you from rootobs, but unless someone corrects
me, I don't think you can expect a 'for' statement to do that. You need
to have a 'next' statement inside your for loop to get the next yield
from the generator.
Yes, you absolutely can expect a for statement to do that. It will
accept any iterable as its `y`.
>> And here is someone correcting me, which I sort of suspected there
might be. Yes,
>> range is an iterator, but I didn't know a generator could also be
used as an iterator.
>> Makes perfect sense though, a generator does dispense its yields in
>> defined by the generator.
`for x in y: stuff(x)` is effectively syntactic sugar for:
iterator = iter(y)
x = next(iterator)
Manually calling `next()` inside a `while True:` is quite an unusual
thing to do.
>> And you don't need to do it very often. The only use case I know is
this one, where the number of yields the generator can output is unknown
(here, the number of files the generator can access is unknown). You
might recall that the original poster wanted to use a while, but didn't
know how to terminate it. At least that's how I interpreted what he was
range() is not part of the for syntax at all, it's completely separate,
it simply returns an iterator which the for loop can use, like any
>> I see that now, I just didn't know a generator could be used as an
More information about the Python-list