什么是运算符的优先级
每个运算符都有固定的优先级
当表达式中包含优先级不同的运算符时,高优先级的运算符先参与运算。
比如:运算符 * 和 / 的优先级比运算符 + 和 - 的优先级高,正所谓“先乘除,后加减”
print(2 + 3 + 4)
9
以下表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
---|---|
** | 指数(最高优先级) |
~+ - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
< > == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
什么是运算符的结合性
每个运算符都有固定的结合性
当表达式包含优先级相同的运算符时,结合性定义了哪个运算符先参与运算
如果运算符的结合性为 左,那么左边的运算符先参与运算
比如:2+3-4, 2+3会先参与运算
如果运算符的结合性为右,那么右边的运算符先参与运算
比如:a = b = 18, b = 18会先参与运算
正确使用运算符的优先级和结合性
没有必要记忆所有运算符的优先级和结合性
对于包含多个运算符的复杂表达式,其可读性是较低的,为了提高可读性,建议的做法有两种:
(1)在复杂表达式中使用小括号指定运算顺序
(2)将复杂表达式拆分成几步来完成
is_has_key = False
is_entered_door = False
is_passed_scan = False
is_know_password = True
# and比or的优先级高,or的结合性是 左
print(is_has_key or is_entered_door and is_passed_scan or is_know_password)
# 在复杂表达式中使用小括号指定运算顺序
print((is_has_key or (is_entered_door and is_passed_scan)) or is_know_password)
True
True
step1 = is_entered_door and is_passed_scan
step2 = is_has_key or step1
step3 = step2 or is_know_password
print(step3)
True
学习参考: