print(a ** b ** c) - 错误的优先顺序 - Python

时间:2018-04-07 19:45:16

标签: python function double exponential operator-precedence

我尝试打印(2 ** 3 ** 2)来测试优先顺序,但是在Python中,Python返回了512.0作为结果。我预计Python会首先取2,然后取3或8.然后8,取力量2返回64作为结果(因为操作从左到右读取)。

但相反,Python读取2 ** 3 ** 2 = 2 ** 9 = 512(从右到左)。

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

它被描述为以in the docs

的方式行事
  

权力运算符比左边的一元运算符绑定得更紧密;它比右边的一元运算符更紧密。语法是:

power ::=  ( await_expr | primary ) ["**" u_expr]
     

因此,在功率和一元运算符的未表示序列中,运算符从右到左进行评估(这不会限制操作数的评估顺序):-1**2导致-1

在这种情况下,你的问题不仅仅是优先,而是 associativity