Screwing Up looping in Generator
Erik
python at lucidity.plus.com
Tue Jan 3 06:44:50 EST 2017
Hi,
On 03/01/17 22:14, Deborah Swanson wrote:
> ...you have to create the generator object first and use it to call the
> next function. And I really don't think you can use a generator as your
> range in a for loop. So I'd use a 'while True', and break out of the
> loop when you hit the StopIteration exception:
>
> files = rootobs()
>
> while True:
> try:
> file = files.next()
> except StopIteration:
> break
>
> base = os.path.basename(file.name)
> .
> .
> .
> (etc)
What you have done there is taken an understanding of the underlying machinery
that allows the 'for' loop to be syntactic sugar over any iterable and spelled
it out, instead of just using 'for'! Without all that, your example is:
for file in rootobs():
base = os.path.basename(file.name)
.
.
.
(etc)
[In fact, the machinery would also cope with the return value from rootobs()
being an iterable but not an iterator by using "files = iter(rootobjs)"].
You seem to be reading up on how the stuff works under the covers (i.e., from
the point of view of an implementer of a class or library) and then suggesting
that that's what the *caller* of that class or library needs to do. They don't
- for a caller, 'for x in seq:' is all they need to know - the mechanics are
handled by the interpreter coupled with the dunder methods that the class may
implement.
E.
More information about the Python-list
mailing list