Python 运算符与快捷方式运算符的优先级?

Python Operator Precedence with Shortcut Operator?

提问人:chilly8063 提问时间:10/25/2023 更新时间:10/25/2023 访问量:39

问:

我知道 Python 遵循首字母缩略词 PEMDAS 或 P-E-MD-AS 的运算符优先级

现在 Python 恰好使用快捷运算符,例如,如果我要编写

x=5
x=x+1

这可以改写为

x+=1

现在,当我更进一步并尝试进行多个操作时,我注意到了一些奇怪的事情,例如

x=6
y=2

x=x/2*3

从左到右 x 变为 9.0

如果我尝试使用快捷方式语法重写上述内容,我会得到以下结果

x/=2*3

但这会导致 1.0

似乎右侧的乘法似乎发生在除法快捷方式运算符之前?我以为我们会从左到右工作,所以我很困惑这是如何工作的

情况总是这样吗?如果是这样,为什么它以这种方式工作?

Python 快捷方式 运算符优先级

评论

2赞 deceze 10/25/2023
/=以特定方式将右侧值应用于其左侧。的右边是,左边是。它将 by 的值除以并将其赋值给 。这与右侧非常不同的地方不同。它们是不同的运算符,不能复制粘贴。x/=2*36xx6xx=x/2*3

答:

2赞 Tom Karzes 10/25/2023 #1

不能使用运算符重写。原因是(大部分)等同于 .但在你的情况下,你有 ,其中组为 .这没有形式。右侧的顶级运算符是 ,左边的操作数是 ,而不是 。你能做的最好的事情就是把它分成两个语句:后面跟着,但我认为这不会改善任何事情。x=x/2*3op=x op= yx = x op yx=x/2*3x=(x/2)*3x = x op y*x/2xx /= 2x *= 3

0赞 Manuel A. Martinez 12/13/2023 #2

下面是一个链接(Prepbytes - 运算符优先级),它描述了赋值运算符(=、+=、-=、*=、/=、//=、%=、**=、&=、|=、^=、<>=)的优先级最低。 我的理解是,赋值运算符是在为变量赋值的那一刻计算的。Python首先处理赋值运算符右侧的运算,最后处理快捷方式(赋值)运算符计算。2 * 3x /= 6

如果 ,则计算公式为:x=6x /= 2 * 3

x = x / (2 * 3)

x = 6 / (2 * 3)

x = 6 / 6

x = 1.0

评论

0赞 Community 12/15/2023
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。