首页 > 解决方案 > 为什么将值存储在变量中会对幂运算符产生影响

问题描述

为什么我将值存储在指数运算符的变量中(在 python 3.6 中测试)很重要?

>>> -7**2
-49
>>> y=-7
>>> y**2
49

第一个明显错了!

标签: python

解决方案


你是一种叫做operator priority的受害者。

在 Python 中,运算符基本上是函数。然而,与通常的函数调用不同,它总是带有一对括号来表示函数中的内容,运算符没有。因此,需要一个定义良好的规则列表,这些规则会影响包括运算符在内的表达式的解析方式。

例如,如果您1 + 2 * 3天真地从左到右阅读,您会期望得到 的答案9,而不是数学上正确的7。为了获得正确的结果,*被定义为具有比更高的优先级+。这导致在表达式中插入一对隐式括号,将其更改为1 + (2 * 3).

另一种看待这个问题的方法是查看运算符是如何被翻译的 具有更高优先级的运算符更早地绑定到它们的参数。所以,回到前面的例子,首先*绑定到2and 3,所以我们得到1 + *(2, 3). 只有这样才能+绑定,这给出了+(1, *(2, 3)).

回到你原来的问题:你得到不同结果的原因是幂运算符 ,**比一元否定运算符 , 具有更高的优先级-。因此,7 ** 2首先执行,它给出49然后否定给出-49

相反,当您执行 时y = -7,您首先评估一元否定。下一个表达式就是(-7) ** 2,当然是49


推荐阅读