我在 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
关于python - 为什么 Python 需要永远评估 1**4**4**4**4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044728/