Python's "only one way to do it" philosophy isn't good?
Steven D'Aprano
steve at REMOVE.THIS.cybersource.com.au
Sat Jun 9 20:34:21 EDT 2007
On Sat, 09 Jun 2007 22:52:32 +0000, Josiah Carlson wrote:
> the only thing that optimization
> currently does in Python at present is to discard docstrings
Python, or at least CPython, does more optimizations than that. Aside from
run-time optimizations like interned strings etc., there are a small
number of compiler-time optimizations done.
Running Python with the -O (optimize) flag tells Python to ignore
assert statements. Using -OO additionally removes docstrings.
Regardless of the flag, in function (and class?) definitions like the
following:
def function(args):
"Doc string"
x = 1
s = "this is a string constant"
"and this string is treated as a comment"
return s*x
The string-comment is ignored by the compiler just like "real" comments.
(The same doesn't necessarily hold for other data types.)
Some dead code is also optimized away:
>>> def function():
... if 0:
... print "dead code"
... return 2
...
>>> dis.dis(function)
4 0 LOAD_CONST 1 (2)
3 RETURN_VALUE
Lastly, in recent versions (starting with 2.5 I believe) Python includes a
peephole optimizer that implements simple constant folding:
# Python 2.4.3
>>> dis.dis(lambda: 1+2)
1 0 LOAD_CONST 1 (1)
3 LOAD_CONST 2 (2)
6 BINARY_ADD
7 RETURN_VALUE
# Python 2.5
>>> dis.dis(lambda: 1+2)
1 0 LOAD_CONST 2 (3)
3 RETURN_VALUE
The above all holds for CPython. Other Pythons may implement other
optimizations.
--
Steven.
More information about the Python-list
mailing list