PEP 255: Simple Generators, Revised Posting

Bernhard Herzog bh at
Mon Jun 25 11:52:58 CEST 2001

"Tim Peters" < at> writes:

> [Bernhard Herzog]
> > I wasn't aware of that! For that matter, I wasn't even aware that the
> > compiler removed "if 0" blocks. When was that introduced. It even
> > "works" with 1.5.2.
> It was introduced along with "assert":  under the covers, assert gets
> changed into
>     if __debug__:
>         do the assert code
> __debug__ is a compile-time constant, and it was thought important that
> asserts leave no trace (not even bytecode) under -O.  The mechanism for
> getting rid of
>     if __debug__:
> at compile-time just happens to recognize literal numeric zeroes and empty
> strings as meaning "false" too.

Thanks. I knew about __debug__ and assert but I thought this
optimization would only happen with the -O option. If I understand this
correctly the optimization is always done actually, regardless of
optimization options and the only reason __debug__ code is not removed
when no optimization option is given is that __debug__ is true in that

> > Being able to easily write a function that does nothing (in fact it's
> > the most trivial function one can write) is very useful in practice, so
> > as a generalization being able to write empty generators might be
> > useful, too. I'm not sure about that, though, because I don't have
> > enough experience with them.
> Can't say I see much use for it.  If I did, I'd probably write what
> everybody hates:
> def emptyg():
>     return
>     yield None  # never reached
> Stick that in a utility module and you'll never have to think about it
> again.

Only until the compiler becomes smart enough to remove that unreachable
yield statement. :)


Intevation GmbH                       

More information about the Python-list mailing list