Screwing Up looping in Generator

Deborah Swanson python at
Mon Jan 2 22:21:10 EST 2017

-----Original Message-----
From: Matt Wheeler [mailto:m at]
Sent: Tuesday, January 03, 2017 1:47 PM To: python at; Sayth 
Renshaw; python-list at
Subject: Re: Screwing Up looping in Generator

On Tue, 3 Jan 2017 at 20:17 Deborah Swanson <python at> wrote:

> 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
the sequence
>> defined by the generator.

`for x in y: stuff(x)` is effectively syntactic sugar for:

iterator = iter(y)
while True:
        x = next(iterator)

Manually calling `next()` inside a `while True:` is quite an unusual thing to 

>> 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 saying.

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 other.

>> I see that now, I just didn't know a generator could be used as an

Matt Wheeler

More information about the Python-list mailing list