国庆节10月1日
--


Python3 算术、比较、赋值、逻辑、成员、身份运算符及优先级

本章节主要说明 Python 的运算符。
举个简单的例子:
14 + 5 = 9例子中, 4 和 5 被称为 操作数 ,+ 称为 运算符 。
Python 语言支持以下类型的运算符:
接下来让我们一个个来学习Python的运算符。
以下假设变量 a=10,变量 b=21:
| 运算符 | 描述 | 实例 |
|---|---|---|
| + | 加 - 两个对象相加 | a + b 输出结果 31 |
| - | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -11 |
| * | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
| / | 除 - x 除以 y | b / a 输出结果 2.1 |
| % | 取模 - 返回除法的余数 | b % a 输出结果 1 |
| ** | 幂 - 返回x的y次幂 | a**b 为10的21次方 |
| // | 取整除 - 往小的方向取整数 | >>> 9//2 4 >>> -9//2 -5 |
以下实例演示了Python所有算术运算符的操作:
1a = 212b = 103c = 04
5c = a + b6print("1 - c 的值为:", c)7
8c = a - b9print("2 - c 的值为:", c)10
11c = a * b12print("3 - c 的值为:", c)13
14c = a / b15print("4 - c 的值为:", c)16
17c = a % b18print("5 - c 的值为:", c)19
20a = 221b = 322c = a**b23print("6 - c 的值为:", c)24
25a = 1026b = 527c = a // b28print("7 - c 的值为:", c)以上实例输出结果:
11 - c 的值为: 3122 - c 的值为: 1133 - c 的值为: 21044 - c 的值为: 2.155 - c 的值为: 166 - c 的值为: 877 - c 的值为: 2以下假设变量 a 为 10,变量 b 为20:
| 运算符 | 描述 | 实例 |
|---|---|---|
| == | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
| != | 不等于 - 比较两个对象是否不相等 | (a!= b) 返回 True。 |
| > | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
| < | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | (a < b) 返回 True。 |
| >= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
| <= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 True。 |
以下实例演示了Python所有比较运算符的操作:
1a = 212b = 103c = 04
5if (a == b):6 print("1 - a 等于 b")7else:8 print("1 - a 不等于 b")9
10if (a != b):11 print("2 - a 不等于 b")12else:13 print("2 - a 等于 b")14
15if (a < b):16 print("3 - a 小于 b")17else:18 print("3 - a 大于等于 b")19
20if (a > b):21 print("4 - a 大于 b")22else:23 print("4 - a 小于等于 b")24
25a = 526b = 2027
28if (a <= b):29 print("5 - a 小于等于 b")30else:31 print("5 - a 大于 b")32
33if (b >= a):34 print("6 - b 大于等于 a")35else:36 print("6 - b 小于 a")以上实例输出结果:
11 - a 不等于 b22 - a 不等于 b33 - a 大于等于 b44 - a 大于 b55 - a 小于等于 b66 - b 大于等于 a以下假设变量a为10,变量b为20:
| 运算符 | 描述 | 实例 |
|---|---|---|
| = | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
| += | 加法赋值运算符 | c += a 等效于 c = c + a |
| -= | 减法赋值运算符 | c -= a 等效于 c = c - a |
| *= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
| /= | 除法赋值运算符 | c /= a 等效于 c = c / a |
| %= | 取模赋值运算符 | c %= a 等效于 c = c % a |
| **= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
| //= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
| := | 海象运算符,这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。 Python3.8 版本新增运算符 。 | 在这个示例中,赋值表达式可以避免调用 len() 两次: if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)") |
以下实例演示了Python所有赋值运算符的操作:
1a = 212b = 103c = 04
5c = a + b6print("1 - c 的值为:", c)7
8c += a9print("2 - c 的值为:", c)10
11c *= a12print("3 - c 的值为:", c)13
14c /= a15print("4 - c 的值为:", c)16
17c = 218c %= a19print("5 - c 的值为:", c)20
21c **= a22print("6 - c 的值为:", c)23
24c //= a25print("7 - c 的值为:", c)以上实例输出结果:
11 - c 的值为: 3122 - c 的值为: 5233 - c 的值为: 109244 - c 的值为: 52.055 - c 的值为: 266 - c 的值为: 209715277 - c 的值为: 99864在 Python 3.8 及更高版本中,引入了一种新的语法特性,称为”海象运算符”(Walrus Operator),它使用:= 符号。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。
使用海象运算符可以在一些情况下简化代码,尤其是在需要在表达式中使用赋值结果的情况下。这对于简化循环条件或表达式中的重复计算很有用。
下面是一个简单的实例,演示了海象运算符的使用:
1# 传统写法2n = 103if n > 5:4 print(n)5
6# 使用海象运算符7if (n := 10) > 5:8 print(n)if (n := 10) > 5::这是使用海象运算符(:= )的写法。海象运算符在表达式中进行赋值操作。
(n := 10) :将变量 n 赋值为 10,同时返回这个赋值结果。
> 5 :检查赋值后的 n 是否大于 5。如果条件为真,则执行接下来的代码块。print(n) :如果条件为真,打印变量 n 的值(即 10)。海象运算符的优点:
:= )允许在表达式内部进行赋值,这可以减少代码的重复,提高代码的可读性和简洁性。n ,然后在 if 语句中进行条件检查。而使用海象运算符的写法可以在 if 语句中直接进行赋值和条件检查。按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13二进制格式如下:
1a = 0011 11002
3b = 0000 11014
5-----------------6
7a&b = 0000 11008
9a|b = 0011 110110
11a^b = 0011 000112
13~a = 1100 0011| 运算符 | 描述 | 实例 |
|---|---|---|
| & | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
| ^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
| ~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
| << | 左移动运算符:运算数的各二进位全部左移若干位,由”<<“右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
| >> | 右移动运算符:把”>>“左边的运算数的各二进位全部右移若干位,”>>“右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
以下实例演示了Python所有位运算符的操作:
1a = 602b = 133c = 04
5c = a & b6print("1 - c 的值为:", c)7
8c = a | b9print("2 - c 的值为:", c)10
11c = a ^ b12print("3 - c 的值为:", c)13
14c = ~a15print("4 - c 的值为:", c)16
17c = a << 218print("5 - c 的值为:", c)19
20c = a >> 221print("6 - c 的值为:", c)以上实例输出结果:
11 - c 的值为: 1222 - c 的值为: 6133 - c 的值为: 4944 - c 的值为: -6155 - c 的值为: 24066 - c 的值为: 15Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:
| 运算符 | 逻辑表达式 | 描述 | 实例 |
|---|---|---|---|
| and | x and y | 布尔”与” - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 | (a and b) 返回 20。 |
| or | x or y | 布尔”或” - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
| not | not x | 布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
以上实例输出结果:
1a = 102b = 203
4if (a and b):5 print("1 - 变量 a 和 b 都为 true")6else:7 print("1 - 变量 a 和 b 有一个不为 true")8
9if (a or b):10 print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true")11else:12 print("2 - 变量 a 和 b 都不为 true")13
14a = 015
16if (a and b):17 print("3 - 变量 a 和 b 都为 true")18else:19 print("3 - 变量 a 和 b 有一个不为 true")20
21if (a or b):22 print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")23else:24 print("4 - 变量 a 和 b 都不为 true")25
26if not (a and b):27 print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")28else:29 print("5 - 变量 a 和 b 都为 true")以上实例输出结果:
11 - 变量 a 和 b 都为 true22 - 变量 a 和 b 都为 true,或其中一个变量为 true33 - 变量 a 和 b 有一个不为 true44 - 变量 a 和 b 都为 true,或其中一个变量为 true55 - 变量 a 和 b 都为 false,或其中一个变量为 false除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
| 运算符 | 描述 | 实例 |
|---|---|---|
| in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中, 如果 x 在 y 序列中返回 True。 |
| not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中, 如果 x 不在 y 序列中返回 True。 |
以下实例演示了Python所有成员运算符的操作:
1a = 102b = 203list = [1, 2, 3, 4, 5]4
5if (a in list):6 print("1 - 变量 a 在给定的列表中 list 中")7else:8 print("1 - 变量 a 不在给定的列表中 list 中")9
10if (b not in list):11 print("2 - 变量 b 不在给定的列表中 list 中")12else:13 print("2 - 变量 b 在给定的列表中 list 中")14
15a = 216if (a in list):17 print("3 - 变量 a 在给定的列表中 list 中")18else:19 print("3 - 变量 a 不在给定的列表中 list 中")以上实例输出结果:
11 - 变量 a 不在给定的列表中 list 中22 - 变量 b 不在给定的列表中 list 中33 - 变量 a 在给定的列表中 list 中身份运算符用于比较两个对象的存储单元
| 运算符 | 描述 | 实例 |
|---|---|---|
| is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y), 如果引用的是同一个对象则返回 True,否则返回 False |
| is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(x)!= id(y) 。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
注: id() 函数用于获取对象内存地址。
以下实例演示了Python所有身份运算符的操作:
1a = 202b = 203
4if (a is b):5 print("1 - a 和 b 有相同的标识")6else:7 print("1 - a 和 b 没有相同的标识")8
9if (id(a) == id(b)):10 print("2 - a 和 b 有相同的标识")11else:12 print("2 - a 和 b 没有相同的标识")13
14b = 3015
16if (a is b):17 print("3 - a 和 b 有相同的标识")18else:19 print("3 - a 和 b 没有相同的标识")20
21if (a is not b):22 print("4 - a 和 b 没有相同的标识")23else:24 print("4 - a 和 b 有相同的标识")以上实例输出结果:
11 - a 和 b 有相同的标识22 - a 和 b 有相同的标识33 - a 和 b 没有相同的标识44 - a 和 b 没有相同的标识is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,== 用于判断引用变量的值是否相等。
1>>> a = [1, 2, 3]2>>> b = a3>>> b is a4True5>>> b == a6True7>>> b = a[:]8>>> b is a9False10>>> b == a11True以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):
| 运算符 | 描述 |
|---|---|
(expressions...), [expressions...], {key: value...}, {expressions...} | 圆括号的表达式 |
x[index], x[index:index], x(arguments...), x.attribute | 读取,切片,调用,属性引用 |
| await x | await 表达式 |
** | 乘方(指数) |
+x, -x, ~x | 正,负,按位非 NOT |
*, @, /, //, % | 乘,矩阵乘,除,整除,取余 |
+, - | 加和减 |
<<, >> | 移位 |
& | 按位与 AND |
^ | 按位异或 XOR |
| | 按位或 OR |
`in`,`not in`, `is`,`is not`, `<`, `<=`, `>`, `>=`, `!=`, `==` | 比较运算,包括成员检测和标识号检测 |
`not x` | 逻辑非 NOT |
`and` | 逻辑与 AND |
`or` | 逻辑或 OR |
`if` -- `else` | 条件表达式 |
`lambda` | lambda 表达式 |
:= | 赋值表达式 |
以下实例演示了Python所有运算符优先级的操作:
1a = 202b = 103c = 154d = 55e = 06
7e = (a + b) * c / d8print("(a + b) * c / d 运算结果为:", e)9
10e = ((a + b) * c) / d11print("((a + b) * c) / d 运算结果为:", e)12
13e = (a + b) * (c / d)14print("(a + b) * (c / d) 运算结果为:", e)15
16e = a + (b * c) / d17print("a + (b * c) / d 运算结果为:", e)以上实例输出结果:
1(a + b) * c / d 运算结果为: 90.02((a + b) * c) / d 运算结果为: 90.03(a + b) * (c / d) 运算结果为: 90.04a + (b * c) / d 运算结果为: 50.0and 拥有更高优先级:
1x = True2y = False3z = False4
5print("情况1:默认优先级(先算and)")6if x or y and z:7 print("yes")8else:9 print("no")10
11print("\n情况2:强制改变优先级(先算or)")12if (x or y) and z:13 print("yes")14else:15 print("no")以上实例先计算 y and z 并返回 False ,然后 x or False 返回 True,输出结果:
1情况1:默认优先级(先算and)2yes3
4情况2:强制改变优先级(先算or)5no注意: Python3 已不支持 <> 运算符,可以使用!= 代替,如果你一定要使用这种比较运算符,可以使用以下的方式:
1>>> from __future__ import barry_as_FLUFL2>>> 1 <> 23True语法: <true_value> if 条件表达式 else <false_value>
条件为真时整个表达式的结果是第一个值,否则是第二个值。因为它能”算出结果”,所以是表达式而不是语句,可以直接写在赋值、函数参数里面。
1age = 202
3# 普通写法4if age >= 18:5 result = "成年"6else:7 result = "未成年"8
9# 三元运算符写法:一行搞定10result = "成年" if age >= 18 else "未成年"11print(result) # 成年在项目中的实际用法(AI 智能伴侣侧边栏,当前会话的按钮高亮):
1st.button(2 session,3 key=f"load_{session}",4 type="primary" if session == st.session_state.current_session else "secondary"5)条件是”这个会话是不是当前会话”,为真则按钮类型取 "primary"(高亮),否则取 "secondary"(普通)。
注意: 三元运算符是先算条件前面那个值、再看条件的写法,不要和
and/or的短路混用;嵌套多层(a if x else b if y else c)会严重影响可读性,超过两层建议改回if...elif...else。
+ 加、- 减、* 乘、/ 除(结果一定是浮点数)、% 取模(余数)、** 幂、// 整除(往小的方向取整数,-9 // 2 得 -5)== 等于、!= 不等于、>、<、>=、<=,结果都是 True 或 False;注意 = 是赋值、== 才是比较,别写混= 直接赋值;复合赋值 +=、-=、*=、/=、%=、**=、//=——c += a 就等价于 c = c + a:=(Python 3.8 新增):在表达式里同时赋值并返回这个值,如 if (n := len(a)) > 10: 可以避免把 len(a) 算两遍& 按位与、| 按位或、^ 按位异或、~ 按位取反、<< 左移、>> 右移(例:60 & 13 = 12)and(x 为假就返回 x,否则返回 y)、or(x 为真就返回 x,否则返回 y)、not(取反);and/or 返回的是参与运算的值本身,不一定是 True/False(10 and 20 得 20)in(在序列里找到就返回 True)、not in(找不到才返回 True),可用于字符串、列表、元组is / is not 比的是是不是同一个对象(相当于比 id());== 比的是值。b = a 是同一个对象,b = a[:] 只是值相等的新对象** → 正负号、~ → * / // % → + - → 移位 → & ^ | → 比较/成员/身份 → not → and → or → 条件表达式值1 if 条件 else 值2——条件为真取前面的值,为假取后面的值;它是个表达式(能算出结果),可以直接写在赋值和函数参数里 2-1 算术运算符练习 ❌
创建文件 test_arithmetic.py,完成以下计算并打印结果:
15 + 4(加法)15 - 4(减法)15 * 4(乘法)15 / 4(除法,得到小数)15 // 4(整除)15 % 4(取余)2 ** 10(乘方)批改(2026-09-28):❌ 7 个
f前缀,输出成了字面量15+4={15+4};正确写法是print(f"15 + 4 = {15 + 4}")。另外第 7 行写的是15**4(题面要求2 ** 10),字符串里还多写了一个a(15**4=a{15**4}),应改成print(f"2 ** 10 = {2 ** 10}")。
一级 · 思路:七个小算式一个一个算出来打印,把算式直接写进输出字符串的花括号里,让 Python 替你算完再填进去
二级 · 方法:带 f 前缀的格式化输出,如 print(f"15 + 4 = {15 + 4}");记住 // 是整除、% 是取余、** 是乘方
三级 · 骨架:print(f"15 + 4 = {15 ____ 4}") / print(f"2 ** 10 = {2 ____ 10}")
1# 2-12print(f"15 + 4 = {15 + 4}") # 193print(f"15 - 4 = {15 - 4}") # 114print(f"15 * 4 = {15 * 4}") # 605print(f"15 / 4 = {15 / 4}") # 3.756print(f"15 // 4 = {15 // 4}") # 37print(f"15 % 4 = {15 % 4}") # 38print(f"2 ** 10 = {2 ** 10}") # 1024 2-2 比较运算符练习
创建文件 test_compare.py,完成以下操作:
10 == 10、10 != 5、10 > 5、10 < 5、10 >= 10、10 <= 5批改(2026-09-28):⚠️ 6 个结果值全对(
True/True/True/False/True/False),但第 5 项写的是10 >= 5,题面要求10 >= 10(两者结果恰好都是 True)。
一级 · 思路:六个比较各算一遍,把整个比较式放进花括号里,Python 会把 True/False 填进去
二级 · 方法:比较运算符 ==、!=、>、<、>=、<=;输出用 print(f"10 == 10: {10 == 10}") 这种写法
三级 · 骨架:print(f"10 >= 10: {10 ____ 10}") / print(f"10 != 5: {10 ____ 5}")
1# 2-22print(f"10 == 10: {10 == 10}") # True3print(f"10 != 5: {10 != 5}") # True4print(f"10 > 5: {10 > 5}") # True5print(f"10 < 5: {10 < 5}") # False6print(f"10 >= 10: {10 >= 10}") # True7print(f"10 <= 5: {10 <= 5}") # False 2-3 赋值运算符练习
创建文件 test_assignment.py,完成以下操作:
a = 10+= 加 5-= 减 3*= 乘 2//= 整除 3批改(2026-09-28):✅ 正确(15、12、24、8 四步结果都对);没有打印初始值
10,参考答案有print(f"初始值: a = {a}")这一行。
一级 · 思路:每做一次复合赋值就立刻输出一次,盯着变量一步一步变成多少
二级 · 方法:复合赋值运算符 +=、-=、*=、//=——a += 5 等价于 a = a + 5
三级 · 骨架:a ____ 5 / a -= ____ / a *= 2 / a //= ____
1# 2-32a = 103print(f"初始值: a = {a}") # 104
5a += 56print(f"a += 5: {a}") # 157
8a -= 39print(f"a -= 3: {a}") # 1210
11a *= 212print(f"a *= 2: {a}") # 2413
14a //= 315print(f"a //= 3: {a}") # 8 2-4 逻辑运算符练习
创建文件 test_logical.py,完成以下操作:
True and False、True or False、not Truea = 10, b = 20,测试 a and b、a or b、not a批改(2026-09-28):✅ 正确(
False、True、False、20、10、False全对)。
一级 · 思路:先拿两个布尔值直接算一遍,再换成两个数字变量算一遍,对比两次的输出
二级 · 方法:and、or、not;输出写 print(f"a and b: {a and b}");留意 and/or 返回的是值本身,not 返回的才是布尔值
三级 · 骨架:print(f"a or b: {a ____ b}") / print(f"not a: {____ a}")
1# 2-42print(f"True and False: {True and False}") # False3print(f"True or False: {True or False}") # True4print(f"not True: {not True}") # False5
6a = 107b = 208print(f"a and b: {a and b}") # 20(返回最后一个真值)9print(f"a or b: {a or b}") # 10(返回第一个真值)10print(f"not a: {not a}") # False 2-5 成员运算符练习
创建文件 test_member.py,完成以下操作:
fruits = ["苹果", "香蕉", "橘子"]"苹果" in fruits"西瓜" not in fruits"香蕉" in fruits批改(2026-09-28):✅ 正确(
"苹果" in fruits、"西瓜" not in fruits、"香蕉" in fruits三项都输出 True)。
一级 · 思路:先建一个水果列表,再用成员运算符一项一项判断某个值在不在里面
二级 · 方法:成员运算符 in 和 not in;输出写 print(f"'苹果' in fruits: {'苹果' in fruits}")
三级 · 骨架:print(f"'西瓜' not in fruits: {'西瓜' ____ fruits}") / print(f"'香蕉' in fruits: {'香蕉' ____ fruits}")
1# 2-52fruits = ["苹果", "香蕉", "橘子"]3
4print(f"'苹果' in fruits: {'苹果' in fruits}") # True5print(f"'西瓜' not in fruits: {'西瓜' not in fruits}") # True6print(f"'香蕉' in fruits: {'香蕉' in fruits}") # True 2-6 身份运算符练习
创建文件 test_identity.py,完成以下操作:
a = [1, 2, 3],b = a,c = a[:]a is b、a is c、a == b、a == cid() 查看内存地址批改(2026-09-28):✅ 正确(
a is bTrue、a is cFalse、a == b/a == cTrue;实测id(a)与id(b)相同、id(c)不同)。
一级 · 思路:b = a 只是给同一个对象又起了一个名字,切片 c = a[:] 才是真的造出一个新对象;用身份运算符比一比,再看两者的内存地址
二级 · 方法:身份运算符 is / is not、相等比较 ==;看内存地址用内置函数 id(对象)
三级 · 骨架:print(f"a is c: {a ____ c}") / print(f"id(a): {____(a)}")
1# 2-62a = [1, 2, 3]3b = a4c = a[:]5
6print(f"a is b: {a is b}") # True(同一个对象)7print(f"a is c: {a is c}") # False(不同对象)8print(f"a == b: {a == b}") # True(值相等)9print(f"a == c: {a == c}") # True(值相等)10
11print(f"id(a): {id(a)}")12print(f"id(b): {id(b)}") # 和 a 相同13print(f"id(c): {id(c)}") # 和 a 不同如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


