今天编程时遇到一个坑,写下此篇记录一下
在if判断语句中,有and 和 or 一起时,优先级and比or更高,例如:
x or y and z 等价于x or (y and z),代码如下:
x = True
y = False
z = False
print('x or y: ',x or y) # True
print('y and z: ',y and z) # False
print('x or y and z: ',x or y and z) # True
print('(x or y) and z: ',(x or y) and z) # False
print('*'*20)
if x or y and z:
print('yes')
else:
print('no')
运行结果:
x or y: True
y and z: False
x or y and z: True
(x or y) and z: False
********************
yes
附上运算符优先规则表,整理自runoob
python中运算符的优先规则:
运算符 | 描述 |
---|---|
** | 指数,优先级最高 |
~, +, - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
*, /, %, // | 乘,除,求余数和取整除 |
+ - | 加法减法 |
>>, << | 右移,左移(位运算符) |
& | ‘AND’(位运算符) |
^ | 位运算符 |
<=, <, >, >= | 比较运算符 |
==, != | 等于运算符 |
=, %=, /=, //=, -=, +=, *=, **= | 赋值运算符 |
is ,is not | 身份运算符 |
in, not in | 成员运算符 |
not, and, or | 逻辑运算符 |
pass~