これを見てください:
>>> def f():
... return (2+3)*4
...
>>> dis(f)
2 0 LOAD_CONST 5 (20)
3 RETURN_VALUE
明らかに、コンパイラは を事前に評価して(2+3)*4
おり、これは理にかなっています。
ここで、 のオペランドの順序を単純に変更すると、次のようになります*
。
>>> def f():
... return 4*(2+3)
...
>>> dis(f)
2 0 LOAD_CONST 1 (4)
3 LOAD_CONST 4 (5)
6 BINARY_MULTIPLY
7 RETURN_VALUE
式は完全に事前評価されていません! これの理由は何ですか?私は CPython 2.7.3 を使用しています。