Skip to main content
 首页 » 编程设计

python之为什么 Python 需要永远评估 1**4**4**4**4

2025年05月04日10bluestorm

我在 Python 2 和 Python 3 中都遇到了一个奇怪的问题。

>>> 1**4**4**4 
1L 
which seems fine, but when I do this: 
>>> 1**4**4**4**4 

它会淹没 CPU 并且永远不会完成。

为什么?

我还运行了这些以查看它是否具有幂函数或 ** 运算符,它似乎只是 ** 运算符。

>>> (((((1**4)**4)**4)**4)**4) 
1 
>>> pow(pow(pow(pow(pow(pow(1,4),4),4),4),4),4) 
1 
>>> pow(pow(pow(pow(pow(pow(1.0,4),4),4),4),4),4) 
1.0 
>>> pow(pow(pow(pow(pow(pow(1L,4),4),4),4),4),4) 
1L 
>>> 1L**4**4**4 
1L 

我也尝试了另一种语言,它似乎只是 Python。

为什么它不能以微秒为单位进行评估?有人可以解释它在 CPU 时间上的作用吗?

是否有我不理解的关于操作顺序的不直观的东西?

请您参考如下方法:

对于 ** 运算符,绑定(bind)规则是这样的:在未加括号的表达式中,首先计算右侧。

您的 1 ** 4 ** 4 ** 4 ** 4 按以下顺序计算:

1 ** (4 ** (4 ** (4 ** 4))) 

它一直在为右侧的巨大数字生成和分配内存:

>>> 4 ** 4 ** 4 
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096L 
>>> 4 ** 4 ** 4 ** 4 
# ... wait a long time as Python allocates GBs of memory ... 

引用** documentation :

Thus, in an unparenthesized sequence of power and unary operators, the operators are evaluated from right to left