Python 运算和分组的指数顺序

Python exponentiation order of operations and grouping

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

指数组from right to left

因此,7 ** 3 ** 24 被评估为 7 ** 282429536481(困难),而 (7**3) ** 24 只是 343 ** 24(简单)。


作为一个有趣的旁注:具有窥孔优化器的 CPython 能够通过不断折叠来优化 "easy" 情况。但是 "hard" 的情况只能折叠 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