Python取幂操作和分组的顺序

时间:2015-04-02 03:41:05

标签: python time operators exponentiation

简单问题: 为什么(7**3) ** 24 % 25几乎没有时间运行,但7 ** 3 ** 24 % 25没有终止?

1 个答案:

答案 0 :(得分:10)

指数组from right to left

因此,7 ** 3 ** 24评估为7 ** 282429536481(硬),而(7**3) ** 24仅评估343 ** 24(简单)。


作为一个有趣的旁注:CPython,它有一个窥视孔优化器,能够优化" easy"不断折叠的情况。但是"硬"案例只能折叠3 ** 24

>>> def foo():
        return 7 ** 3 ** 24 % 25
... 
>>> def bar():
        return (7**3) ** 24 % 25
... 
>>> dis.dis(foo)
  2           0 LOAD_CONST               1 (7)
              3 LOAD_CONST               5 (282429536481)
              6 BINARY_POWER        
              7 LOAD_CONST               4 (25)
             10 BINARY_MODULO       
             11 RETURN_VALUE        
>>> dis.dis(bar)
  2           0 LOAD_CONST               7 (1L)
              3 RETURN_VALUE