Python中walrus operator(海象运算符)的运算优先级顺序是怎样的?
海象运算符优先级说明
海象运算符(:=)是Python 3.8引入的赋值表达式运算符,优先级在所有Python运算符中仅高于逗号表达式,属于优先级极低的运算符。
以下是加入W(代表海象运算符)的拓展PEMDAS优先级表,按优先级从高到低排列:
- P:括号/分组(
()),优先级最高 - E:指数运算(
**) - 前缀正负号(
+x、-x) - M/D:乘、除、取模、地板除(
*、/、%、//) - A/S:加、减(
+、-) - 位移运算(
<<、>>) - 按位与(
&) - 按位异或、按位或(
^、|) - 比较运算符(
==、!=、<、>、<=、>=、in、not in、is、is not) - 布尔非(
not) - 布尔与(
and) - 布尔或(
or) - W:海象运算符(
:=) - 逗号表达式(
,)
因为海象运算符优先级极低,大多数情况下如果要把赋值结果参与其他运算,都需要给海象表达式加括号,否则会出现不符合预期的结果:
# 错误用法:无括号时先执行比较运算,再赋值 count = 0 while count := count + 1 < 3: print(count) # 以上代码会无限输出True,因为先算count+1 <3,结果为True赋值给count,下一轮循环True+1=2还是<3,永远成立 # 正确用法:加括号优先执行海象赋值 count = 0 while (count := count + 1) < 3: print(count) # 输出1、2,符合预期
内容的提问来源于stack exchange,提问作者Nathan Dai
相关产品推荐
相关产品推荐

