Python幂运算和分组顺序
因此,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
OOOOOOOOH是的!这与常规数学中的相同。对不起,我很蠢。 – 2015-04-02 03:47:22
是的,1.6910144928582986e + 238680647722是相当大的。 :-)当然,如果我们只关心mod 25,我们可以使用pow的三参数形式来快速得到结果。 – DSM 2015-04-02 03:47:54
当它用上标写出时,顺序是显而易见的,但在这种表示法中,我没有意识到发生了什么。 – 2015-04-02 03:48:29
运算符优先级.. – wim 2015-04-02 03:42:03
@wim具体是什么?如果'%'优先于'**',那么它将计算343到24的幂,这几乎不需要时间。否则,它与快速表达相同。 – 2015-04-02 03:43:02