Ell*_*sky 3 python time operators exponentiation
简单的问题:为什么(7**3) ** 24 % 25几乎没有时间运行,但7 ** 3 ** 24 % 25没有终止?
wim*_*wim 10
从右到左的指数组.
因此,7 ** 3 ** 24被评估为7 ** 282429536481(硬),而(7**3) ** 24只是343 ** 24(简单).
作为一个有趣的旁注:CPython,它有一个窥视孔优化器,能够通过恒定折叠来优化"简单"的情况.但"硬"案件只能折叠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
Run Code Online (Sandbox Code Playgroud)