a = 10b = 20print(a == b) # Falseprint(a != b) # Trueprint(a > b) # Falseprint(a < b) # Trueprint(a >= 10) # Trueprint(b <= 20) # True
连续比较(Python 特色)
Python 特色
Python 支持连续比较,其他语言大多不支持。
age = 25# 判断是否在某个范围if 18 <= age <= 30: print("年轻人")# 等价于if age >= 18 and age <= 30: print("年轻人")
10.3 逻辑运算符
运算符
说明
示例
结果
and
与(两边都为True才为True)
True and False
False
or
或(一边为True就为True)
True or False
True
not
非(取反)
not True
False
真值表
and:
A
B
A and B
True
True
True
True
False
False
False
True
False
False
False
False
or:
A
B
A or B
True
True
True
True
False
True
False
True
True
False
False
False
not:
A
not A
True
False
False
True
短路运算
重要!
逻辑运算符有短路特性:
and:左边为 False 时,右边不执行
or:左边为 True 时,右边不执行
# and 短路def func(): print("执行了") return TrueFalse and func() # 什么都不输出,func()没执行True and func() # 输出"执行了"# or 短路True or func() # 什么都不输出,func()没执行False or func() # 输出"执行了"
逻辑运算符的返回值
小技巧
逻辑运算符返回的不一定是布尔值,而是决定结果的那个值。
# and:返回第一个假值,都真则返回最后一个3 and 0 # 03 and 5 # 5"" and "hello" # ""# or:返回第一个真值,都假则返回最后一个3 or 0 # 30 or 5 # 5"" or "hello" # "hello"
10.4 赋值运算符
运算符
说明
示例
等价于
=
简单赋值
a = 10
-
+=
加等于
a += 5
a = a + 5
-=
减等于
a -= 5
a = a - 5
*=
乘等于
a *= 5
a = a * 5
/=
除等于
a /= 5
a = a / 5
//=
整除等于
a //= 5
a = a // 5
%=
取余等于
a %= 5
a = a % 5
**=
幂等于
a **= 2
a = a ** 2
示例
a = 10a += 5 # a = 15a -= 3 # a = 12a *= 2 # a = 24a /= 4 # a = 6.0a //= 2 # a = 3.0a %= 2 # a = 1.0a **= 3 # a = 1.0
注意
Python 没有 ++ 和 -- 运算符!
要用 a += 1 或 a = a + 1
10.5 位运算符
按二进制位进行运算。
运算符
说明
示例(5=0101, 3=0011)
结果
&
按位与
5 & 3
1 (0001)
|
按位或
5 | 3
7 (0111)
^
按位异或
5 ^ 3
6 (0110)
~
按位取反
~5
-6
<<
左移
5 << 1
10 (1010)
>>
右移
5 >> 1
2 (0010)
示例
a = 5 # 二进制:0101b = 3 # 二进制:0011print(a & b) # 1(0001)print(a | b) # 7(0111)print(a ^ b) # 6(0110)print(~a) # -6(按位取反)print(a << 1) # 10(左移1位,相当于*2)print(a >> 1) # 2(右移1位,相当于//2)
位运算的应用
左移 << n 相当于乘以 2ⁿ
右移 >> n 相当于除以 2ⁿ(整除)
x & 1 可以判断奇偶(结果为1是奇数)
位运算速度很快,性能优化时会用到
10.6 成员运算符
运算符
说明
示例
结果
in
在序列中
3 in [1,2,3]
True
not in
不在序列中
4 not in [1,2,3]
True
示例
# 列表lst = [1, 2, 3, 4, 5]print(3 in lst) # Trueprint(10 in lst) # False# 字符串print("h" in "hello") # Trueprint("abc" in "hello") # False# 字典(判断的是key)d = {"name": "Tom", "age": 18}print("name" in d) # Trueprint("Tom" in d) # False(判断的是key,不是value)
10.7 身份运算符
运算符
说明
示例
is
是同一个对象(内存地址相同)
a is b
is not
不是同一个对象
a is not b
is vs ==
重要区别
==:比较值是否相等
is:比较身份(内存地址)是否相同
a = [1, 2, 3]b = [1, 2, 3]print(a == b) # True(值相等)print(a is b) # False(不是同一个对象)c = aprint(a is c) # True(是同一个对象)
什么时候用 is?
判断是否为 None:if x is None:
判断是否为 True / False
确认两个变量是否引用同一个对象
小整数缓存
Python 对小整数(-5 到 256)有缓存,所以:
a = 100b = 100print(a is b) # True(小整数缓存)a = 1000b = 1000print(a is b) # False(大整数不缓存)