在 Python 中,运算符指的是对 “变量” 或 “值” 进行运算操作的符号。运算符一般用于对一个或几个值进行计算,从而得出运算结果,如下图所示。就像数学中的加减乘除也需要运算符一样。不过对于 Python 来说,我们需要遵循计算机语言运算的一套规则。

在 Python 中,常用的运算符有以下几种。
- 算术运算符。
- 赋值运算符。
- 比较运算符。
- 逻辑运算符。
- 成员运算符。
- 身份运算符。
除了上面运算符之外,Python 还有位运算符和三元运算符。其中,三元运算符在下一章会介绍到。而位运算符用得不多,这里不详细展开。
Python 算术运算符
在 Python 中,算术运算符一般用于实现数学运算,包括加、减、乘、除等。其中,常用的算术运算符如下表所示。
| 运算符 | 说明 | 示例 |
|---|---|---|
| + | 加 | 10 + 5 # 返回 15 |
| - | 减 | 10 - 5 # 返回 5 |
| * | 乘 | 10 * 5 # 返回 50 |
| / | 除 | 10 / 5 # 返回 2.0 |
| % | 求余 | 10 % 4 # 返回 2 |
| ** | 求幂 | 2 ** 3 # 返回 8 |
| // | 取整除,即返回商的整数部分 | 9 // 2 # 返回 4 |
对于整数间的四则运算,只有 “/” 的运算结果是浮点数,其他运算结果均为整数。
注意: Python 中的乘号是 “*” 而不是 “×”,除号是 “/” 而不是 ÷。为什么要这样定义呢?这是因为 Python 语言的开发者希望尽量使用键盘上已有的符号来表示这些运算符。我们仔细看看自己的键盘,是不是只有 “*” 和 “/”,却没有 “×” 和 “÷”?
示例 1:使用算术运算符
a = 1
b = 2
c = 3
print(a + b * c)运行结果如下。
7分析:
在上述代码中,print(a + b * c) 等价于 print(1 + 2 * 3),因此运行结果为 7。
Python 赋值运算符
在 Python 中,赋值运算符用于将右边表达式的值保存到左边的变量中去。其中,常用的赋值运算符如下表所示。
| 运算符 | 示例 |
|---|---|
| = | name = 'Python' |
| += | a += b 等价于 a = a + b |
| -= | a -= b 等价于 a = a - b |
| *= | a *= b 等价于 a = a * b |
| /= | a /= b 等价于 a = a / b |
| %= | a %= b 等价于 a = a % b |
a += b 其实就是 a = a + b 的简化形式。+=、-=、*= 以及 /= 这几个运算符,其实就是为了简化代码而出现的,有经验的开发人员大多喜欢用这种简写形式。小伙伴们还是要熟悉一下这种写法,以免看不懂别人的代码。
示例 2:使用赋值运算符
a = 10
b = 5
a += b
b += a
print(a)
print(b)运行结果如下。
15
20分析:
首先定义变量 a 的值为 10,变量 b 的值为 5。当执行 a += b 后,此时 a 的值为 15(10 + 5),b 的值没有变化,依旧是 5。由于程序是从上而下执行的,当执行 b += a 时,由于之前 a 的值已经变为 15 了,因此执行后,a 的值为 15,b 的值为 20(即 15 + 5)。
这里要清楚一点:a 和 b 都是变量,它们的值会随着程序的执行而变化。
Python 比较运算符
在 Python 中,比较运算符用于将运算符两边的值或表达式进行比较,如果比较结果是对的,则返回 True;如果比较结果是错的,则返回 False。
True 和 False 是布尔值,我们在 “Python 数据类型” 一节中已经介绍过了。其中,常用的比较运算符如下表所示。
| 运算符 | 说明 | 示例 |
|---|---|---|
| > | 大于 | 2 > 1 # 返回 True |
| < | 小于 | 2 < 1 # 返回 False |
| >= | 大于等于 | 2 >= 2 # 返回 True |
| <= | 小于等于 | 2 <= 2 # 返回 True |
| == | 等于 | 1 == 2 # 返回 False |
| != | 不等于 | 1 != 2 # 返回 True |
注意: 运算符 “<=” 中的 “<” 和 “=” 之间不能有空格,类似的还有 >=、== 和 !=。
示例 3:使用比较运算符
a = 20
b = 10
result1 = (a > b)
result2 = (a == b)
result3 = (a != b)
print(result1)
print(result2)
print(result3)运行结果如下。
True
False
True分析:
对于一条赋值语句来说,都是先运算右边,然后再将右边结果赋值给左边的变量。
= 和 == 的区别
“等号(=)” 是赋值运算符,用于将右边的值赋值给左边的变量。 “双等号(==)” 是比较运算符,用于比较左右两边的值是否相等。
如果想要比较两个值是否相等,写成 a = b 就是错误的,正确写法应该是 a == b。
Python 逻辑运算符
在 Python 中,逻辑运算符用于执行 “布尔值的运算”,且经常和比较运算符结合使用。逻辑运算符只有 3 种,如下表所示。
| 运算符 | 说明 |
|---|---|
| and | “与” 运算 |
| or | “或” 运算 |
| not | “非” 运算 |
1.“与” 运算
在 Python 中,与运算使用 “and” 表示。如果 and 两边的值都为 True,则结果返回 True;如果有一个为 False 或者两个都为 False,则结果返回 False。
真 and 真 → 真
真 and 假 → 假
假 and 真 → 假
假 and 假 → 假示例 4:使用与运算
a = 20
b = 10
c = 10
result = (a < b) and (b == c)
print(result)运行结果如下。
False分析:
a < b 返回 False,b == c 返回 True,因此 result = False and True。根据与运算的规则,result 最终的值为 False。
2. “或” 运算
在 Python 中,或运算使用 “or” 表示。如果 or 两边的值都为 False,则结果返回 False;如果有一个为 True 或者两个都为 True,则结果返回 True。
真 or 真 → 真
真 or 假 → 真
假 or 真 → 真
假 or 假 → 假示例 5:使用或运算
a = 20
b = 10
c = 10
result = (a < b) or (b == c)
print(result)运行结果如下。
True分析:
a < b 返回 False,b == c 返回 True,因此 result = False or True。根据或运算的规则,result 最终的值为 True。
3. “非” 运算
在 Python 中,非运算使用 “not” 表示。非运算跟与运算、或运算不太一样,非运算操作的对象只有一个。当 not 右边的值为 True 时,最终结果为 False;当 not 右边的值为 False 时,最终结果为 True。
not 真 → 假
not 假 → 真非运算其实很简单,直接取反就行,这个家伙就是专门跟你唱反调的。
示例 6:使用非运算符
result1 = not True
result2 = not False
print(result1)
print(result2)运行结果如下。
False
True示例 7:非运算的更多使用
a = 20
b = 10
c = 10
result = not a < b and not b == c
print(result)运行结果如下。
False分析:
a < b 返回 False,故 not a < b 返回 True。b == c 返回 True,故 not b == c 返回 False。not a < b and not b == c 等价于 True and False,结果返回 False。
当把上面示例中的 “and” 换成 “or” 后,返回结果为 True,小伙伴们可以自行测试一下。此外,我们也不要被这些看起来复杂的运算吓到了。实际上,再复杂的运算,一步步来,也是非常简单的。
关于 “与” 、 “或” 、 “非” 的逻辑运算,小伙伴们需要清楚以下几点。
- True 的 not 为 False,False 的 not 为 True。
- A and B:当 A、B 全为 True 时,结果为 True,否则结果为 False。
- A or B:当 A、B 全为 False 时,结果为 False,否则结果为 True。
提示: 接下来介绍的成员运算符和身份运算符,初学的小伙伴可以先跳过。等学完了后面的内容,再到这里回顾一下。
Python 成员运算符
在 Python 中,成员运算符用于判断某个值是否存在于序列(列表、元组、字符串)中。成员运算符只有 2 个,如下表所示。
| 运算符 | 说明 |
|---|---|
| in | 判断某个值是否 “存在” 于序列中。如果存在,返回 True;如果不存在,返回 False |
| not in | 判断某个值是否 “不存在” 于序列中。如果存在,返回 False;如果不存在,返回 True |
示例 8:用于列表
a = 10
b = 5
nums = [1, 2, 3, 4, 5] # 定义一个列表
print(a in nums)
print(b in nums)运行结果如下。
False
True分析:
由于 a 不存在于列表 nums 中,因此 a in nums 返回 False。由于 b 存在于列表 nums 中,因此 b in nums 返回 True。小伙伴们可以把 “in” 改为 “not in”,然后再来看看输出结果。
示例 9:用于元组
a = 10
b = 5
nums = (1, 2, 3, 4, 5) # 定义一个元组
print(a in nums)
print(b in nums)运行结果如下。
False
True示例 10:用于字符串
string = 'Python' # 定义一个字符串
print('th' in string)
print('on' in string)运行结果如下。
True
True身份运算符
在 Python 中,身份运算符用于判断两个变量的引用对象是否同一个。身份运算符只有 2 个,如下表所示。
| 运算符 | 说明 |
|---|---|
| is | 判断两个变量的引用对象是否相同。如果相同,返回 True;如果不同,返回 False |
| is not | 判断两个变量的引用对象是否不同。如果相同,返回 False;如果不同,返回 True |
注意: is 用于判断两个变量的 “引用对象” 是否相同,而 == 用于判断两个变量的 “值” 是否相等。
示例 11:使用身份运算符
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2) # 返回 True,因为它们的值相等
print(list1 is list2) # 返回 False,因为它们在内存中是两个不同的列表对象运行结果如下。
True
False运算符优先级
优先级,其实就是 “执行顺序”。我们都知道,在数学中,先算括号里面的,接下来算 “乘除”,最后算 “加减”。
Python 的运算符也是有优先级的,规则很简单:优先级高的先运算,优先级低的后运算。优先级相同的,从左到右进行运算。
Python 的运算符比较多,优先级也比较复杂。不过平常我们只需要关注常见运算符的优先级就可以了,主要包括以下 3 点。
- 对于算术运算来说,“乘除” 比 “加减” 优先级要高。另外 “求余” 和 “乘除” 的优先级相同。
- 对于逻辑运算来说,非(not)>与(and)>或(or)。
- 对于赋值运算来说,这些赋值运算符优先级都非常低,所以对于一个表达式来说,往往最后才是赋值操作。
