提问人:chilly8063 提问时间:10/25/2023 更新时间:10/25/2023 访问量:39
Python 运算符与快捷方式运算符的优先级?
Python Operator Precedence with Shortcut Operator?
问:
我知道 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
似乎右侧的乘法似乎发生在除法快捷方式运算符之前?我以为我们会从左到右工作,所以我很困惑这是如何工作的
情况总是这样吗?如果是这样,为什么它以这种方式工作?
答:
2赞
Tom Karzes
10/25/2023
#1
不能使用运算符重写。原因是(大部分)等同于 .但在你的情况下,你有 ,其中组为 .这没有形式。右侧的顶级运算符是 ,左边的操作数是 ,而不是 。你能做的最好的事情就是把它分成两个语句:后面跟着,但我认为这不会改善任何事情。x=x/2*3
op=
x op= y
x = x op y
x=x/2*3
x=(x/2)*3
x = x op y
*
x/2
x
x /= 2
x *= 3
0赞
Manuel A. Martinez
12/13/2023
#2
下面是一个链接(Prepbytes - 运算符优先级),它描述了赋值运算符(=、+=、-=、*=、/=、//=、%=、**=、&=、|=、^=、<>=)的优先级最低。
我的理解是,赋值运算符是在为变量赋值的那一刻计算的。Python首先处理赋值运算符右侧的运算,最后处理快捷方式(赋值)运算符计算。2 * 3
x /= 6
如果 ,则计算公式为:x=6
x /= 2 * 3
x = x / (2 * 3)
x = 6 / (2 * 3)
x = 6 / 6
x = 1.0
评论
/=
以特定方式将右侧值应用于其左侧。的右边是,左边是。它将 by 的值除以并将其赋值给 。这与右侧非常不同的地方不同。它们是不同的运算符,不能复制粘贴。x/=2*3
6
x
x
6
x
x=x/2*3