Why don't generators execute until first yield?

Michael Torrie torriem at gmail.com
Wed May 7 17:51:37 EDT 2008


Martin Sand Christensen wrote:
> Why don't
> generators follow the usual eager evaluation semantics of Python and
> immediately execute up until right before the first yield instead?

A great example of why this behavior would defeat some of the purpose of
generators can be found in this amazing PDF presentation:

http://www.dabeaz.com/generators/Generators.pdf

> Giving generators special case semantics for no good reason is a really
> bad idea, so I'm very curious if there is a good reason for it being
> this way. With the current semantics it means that errors can pop up at
> unexpected times rather than the code failing fast.

Most assuredly they do have good reason.  Consider the cases in the PDF
I just mentioned.  Building generators that work on the output of other
generators allows assembling entire pipelines of behavior.  A very
powerful feature that would be impossible if the generators had the
semantics you describe.

If you want generators to behave as you suggest they should, then a
conventional for x in blah approach is likely the better way to go.

I use a generator anytime I want to be able to iterate across something
that has a potentially expensive cost, in terms of memory or cpu, to do
all at once.



More information about the Python-list mailing list