Optimized bytecode in exec statement
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Mon Feb 1 22:35:47 EST 2010
On Mon, 01 Feb 2010 22:19:43 -0300, Gabriel Genellina wrote:
> En Mon, 01 Feb 2010 20:05:16 -0300, Hermann Lauer
> <Hermann.Lauer at iwr.uni-heidelberg.de> escribió:
>
>> while trying to optimize some unpack operations with self compiling
>> code I wondered howto invoke the optimization in the exec statement.
>> Even starting with -O or -OO yields in Python 2.5.2 the same dis.dis
>> code, which
>> is appended below.
>
> There is not much difference with -O or -OO; assert statements are
> removed, __debug__ is False, docstrings are not stored (in -OO). Code
> generation is basically the same.
Also code of the form:
if __debug__:
whatever
is compiled away if __debug__ is false.
> In general, x+0 may execute arbitrary code, depending on the type of x.
> Only if you could determine that x will always be an integer, you could
> optimize +0 away. Python (the current version of CPython) does not
> perform such analysis; you may investigate psyco, Unladen Swallow,
> ShedSkin for such things.
Keep in mind that the peephole optimizer in CPython does constant
folding: 1+1 compiles to 2. Older versions of Python, and other
implementations, may not.
But as a general rule, Python does very little optimization at compile
time. To a first approximation, "remove asserts" is all that it does.
--
Steven
More information about the Python-list
mailing list