看一下这个:
>>> 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。