The docs only say that Python interpreter performs “basic optimizations”, without going into any detail. Obviously, it’s implementation dependent, but is there any way to get a feel for what type of things could be optimized, and how much run-time savings it could generate?
Is there any downside to using -O?
The only thing I know is that -O disables
assert, but presumably one shouldn’t use
assert for things that could still go wrong in production.
In Python 2.7,
-O has the following effect:
- the byte code extension changes to
- sys.flags.optimize gets set to 1
- asserts don’t get executed
-OO has the following effect:
- sys.flags.optimize gets set to 2
- doc strings are not available
To verify the effect for a different release of CPython, grep the source code for
Link to official documentation: https://docs.python.org/2.7/tutorial/modules.html#compiled-python-files