逻辑运算符
and ,or ,not
- 逻辑运算符and、or、not常用来连接条件表达式构成更加复杂的条件表达式,并且and和or具有懒惰求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值。
例如:
表达式"exp1 and exp2" 等价于 “exp1 if not exp1 else exp2 "
表达式"exp1 or exp2” 等价于 “exp1 if exp1 else exp2”
- 在编写复杂条件表达式时,合理安排不同条件的先后顺序,在一定程度上可以提高代码运行速度。
- 注意:运算符 and 和 or 不一定会返回True或False,而是得到最后一个被计算的表达式的值。运算符 not 一定会返回True或False。
关系运算符
运算符 | 表达式 | 含义 |
---|---|---|
== | x == y | x 等于 y |
!= | x != y | x 不等于 y |
> | x > y | x 大于 y |
>= | x >= y | x 大于等于 y |
< | x < y | x 小于 y |
<= | x <= y | x 小于等于 y |
举例:
>>> "ABCDEF" == "ABCD"
False
>>> "ABCD" != "abcd"
True
>>> "ABC" > "ABD"
False
>>> 123 >= 23
True
>>> "ABC" < "上海"
True
>>> "123" <= "23"
True
测试运算符
运算符 | 表达式 | 含义 |
---|---|---|
is | x is y | x 和 y 是同一个对象 |
is not | x is not y | x 和 y 不是同一个对象 |
in | x in y | x 是 y 的成员(y 是容器,eg:元组) |
not in | x not in y | x 不是 y 的成员(y 是容器,eg:元组) |
举例:
>>> x = y = 1
>>> x is y
True
>>> x = 1
>>> y = 2
>>> x is y
False
>>> x = 1
>>> y = 2
>>> x is not y
True
>>> 1 in (1, 2, 3)
True
>>> "A" in "ABCDEF"
True
>>> 1 not in (1, 2, 3)
False
位运算符
- 位运算符只能用于整数,其内部执行过程为:首先将整数转换为二进制数,然后右对齐,必要的时候左侧补0,按位进行运算,最后再把计算结果转换为十进制数字返回。
- 位于运算规则:1&1 = 1、1&0 = 0&1 = 0&0 = 0
位或运算规则:1|1 = 1|0 = 0|1 = 1、0|0 = 0
位异或运算规则:1 ^ 1 = 0^ 0 = 0、1 ^ 0 = 0 ^ 1 = 1 - 左移位时右侧补0,每左移一位相当于乘以2
右移位时左侧补0,每右移一位相当于整除以2。
运算符 | 用法 | 含义 | 优先级 |
---|---|---|---|
~ | ~ op | 按位求补 | 1 |
<< | op1 << op2 | 将 op1 左移 op2 位 | 2 |
>> | op1 >> op2 | 将 op1 右移 op2 位 | 2 |
& | op1 & op2 | 按位逻辑与 | 3 |
^ | op1 ^ op2 | 按位逻辑异或 | 4 |
| | op1 | op2 | 按位逻辑或 | 5 |
举例:
>>> ~ 0x1 ### -2 = -0x2
-2
>>> 0xf0 << 4 ### 3840 = 0xf00
3840
>>> 0xf0 >> 4 ### 15 = 0xf
15
>>> 0xff00 & 0xf0f0 ### 61440 = 0xf000
61440
>>> 0xff00 ^ 0xf0f0 ### 4080 = 0xff0
4080
>>> 0xff00 | 0xf0f0 ### 65520 = 0xfff0
65520
运算优先级
- 运算符优先级遵循的规则为:算术运算符(先乘除,后加减)> 位运算符 >
成员测试运算符 > 关系运算符 > 逻辑运算符 - 强烈建议在编写复杂表示式时使用圆括号来明确说明其中的逻辑
- 运算优先级(由左到右,从上到下依次增高)
运算符 | lambda | or | and | not x | in / not in | is /is not | < 、<=、>、>=、!=、== | | | ^ | & | <<、>> |
---|---|---|---|---|---|---|---|---|---|---|---|
描述 | Lambda表达式 | 布尔"或" | 布尔"与" | 布尔"非" | 成员测试 | 同一性测试 | 比较 | 按位与 | 按位异或 | 按位与 | 移位 |
运算符 | +、- | *、/、% | +x、-x | ~x | ** |
---|---|---|---|---|---|
描述 | 加法、减法 | 乘法、除法、取余 | 正负号 | 按位翻转 | 指数(向右结合) |
- 记忆小口诀: