我尝试打印(2 ** 3 ** 2)来测试优先顺序,但是在Python中,Python返回了512.0作为结果。我预计Python会首先取2,然后取3或8.然后8,取力量2返回64作为结果(因为操作从左到右读取)。
但相反,Python读取2 ** 3 ** 2 = 2 ** 9 = 512(从右到左)。
有人可以解释为什么会这样吗?
答案 0 :(得分:3)
它被描述为以in the docs
的方式行事权力运算符比左边的一元运算符绑定得更紧密;它比右边的一元运算符更紧密。语法是:
power ::= ( await_expr | primary ) ["**" u_expr]
因此,在功率和一元运算符的未表示序列中,运算符从右到左进行评估(这不会限制操作数的评估顺序):
-1**2
导致-1
。
在这种情况下,你的问题不仅仅是优先,而是 associativity 。