简单问题:
为什么(7**3) ** 24 % 25
几乎没有时间运行,但7 ** 3 ** 24 % 25
没有终止?
答案 0 :(得分:10)
因此,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