Inspired by this question about Python caching small integers.
Is it possible for the Python compiler to replace (0 – 6) with -6 at compile time? The code below suggests that it does not. If it is not possible, why not? I don’t think that the meaning of 0, -, or 6 can be different at run time.
If this is possible, why does CPython not do it?
# test_integers.py
def test_integers():
print "-6 is -6 ?", -6 is -6 # True
print "(0 - 6) is -6 ?", (0 - 6) is -6 # False
# import_test_integers.py
import test_integers
test_integers.test_integers()
My Python details in case this is very implementation-dependent:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
First, you shouldn’t be using
isto compare integer values to detect optimizations. That has nothing to do with anything, as explained in the question you linked. If you want to know what optimizations were performed on your function, use the dis module, which produces (in 2.7.2, after fixing your-1typo):and you see that the subtraction actually was optimized away. You can see some others, too: