Python 3 - 基本运算符
Python 3 - 基本运算符
Section titled “Python 3 - 基本运算符”运算符(Operators)是 Python 中对值执行操作的特殊符号或关键字。运算符作用于的值称为操作数(operands)。例如,在表达式 5 + 3 中,+ 是运算符,5 和 3 是操作数。
Python 包含几种类别的运算符:
- 算术运算符 (Arithmetic Operators)
- 比较(关系)运算符 (Comparison (Relational) Operators)
- 赋值运算符 (Assignment Operators)
- 逻辑运算符 (Logical Operators)
- 位运算符 (Bitwise Operators)
- 成员运算符 (Membership Operators)
- 身份运算符 (Identity Operators)
让我们来探讨每种类型。
Python 算术运算符
Section titled “Python 算术运算符”这些运算符执行标准的数学运算。假设 a = 10 和 b = 3:
| 运算符 | 名称 | 描述 | 示例 (a=10, b=3) |
|---|---|---|---|
| + | 加法 | 将操作数相加。 | a + b 是 13 |
| - | 减法 | 从左操作数减去右操作数。 | a - b 是 7 |
| * | 乘法 | 将操作数相乘。 | a * b 是 30 |
| / | 除法 | 用左操作数除以右操作数(结果始终是浮点数)。 | a / b 是 3.333... |
| % | 取模 | 返回除法的余数。 | a % b 是 1 |
| ** | 幂运算 | 将左操作数提升到右操作数的幂。 | a ** b 是 1000 |
| // | 整除 | 执行除法并向下取整到最接近的整数。 | a // b 是 3。-10 // 3 是 -4。 |
#!/usr/bin/env python3a = 10b = 3print(f"a + b = {a + b}")print(f"a - b = {a - b}")print(f"a * b = {a * b}")print(f"a / b = {a / b}")print(f"a % b = {a % b}")print(f"a ** b = {a ** b}")print(f"a // b = {a // b}")print(f"-10 // 3 = {-10 // 3}") # 注意负数的整除Python 比较(关系)运算符
Section titled “Python 比较(关系)运算符”这些运算符比较两个值并返回一个布尔结果(True 或 False)。假设 a = 10 和 b = 20:
| 运算符 | 名称 | 描述 | 示例 (a=10, b=20) |
|---|---|---|---|
| == | 等于 | 检查值是否相等。 | a == b 是 False |
| != | 不等于 | 检查值是否不相等。 | a != b 是 True |
| > | 大于 | 检查左操作数是否更大。 | a > b 是 False |
| < | 小于 | 检查左操作数是否更小。 | a < b 是 True |
| >= | 大于或等于 | 检查左操作数是否大于或等于。 | a >= b 是 False |
| <= | 小于或等于 | 检查左操作数是否小于或等于。 | a <= b 是 True |
#!/usr/bin/env python3a = 10b = 20print(f"a == b: {a == b}")print(f"a != b: {a != b}")print(f"a > b: {a > b}")print(f"a < b: {a < b}")print(f"a >= b: {a >= b}")print(f"a <= b: {a <= b}")Python 赋值运算符
Section titled “Python 赋值运算符”这些运算符将值赋给变量(variables)。基本赋值运算符是 =. 复合赋值运算符(Combined operators)在一个步骤中执行操作并赋值结果。假设 c 最初是 10 进行复合赋值:
| 运算符 | 示例 | 等价于 |
|---|---|---|
| = | x = 5 | x = 5 |
| += | c += 5 | c = c + 5 (c 变为 15) |
| -= | c -= 3 | c = c - 3 (c 变为 7) |
| *= | c *= 2 | c = c * 2 (c 变为 20) |
| /= | c /= 4 | c = c / 4 (c 变为 2.5) |
| %= | c %= 3 | c = c % 3 (c 变为 1) |
| **= | c **= 3 | c = c ** 3 (c 变为 1000) |
| //= | c //= 3 | c = c // 3 (c 变为 3) |
#!/usr/bin/env python3c = 10print(f"Initial c: {c}") # 初始 cc += 5print(f"After c += 5: {c}") # c += 5 后c //= 6print(f"After c //= 6: {c}") # c //= 6 后Python 逻辑运算符
Section titled “Python 逻辑运算符”这些运算符组合条件语句(conditional statements)并返回 True 或 False。假设 x = True 和 y = False:
| 运算符 | 描述 | 示例 (x=True, y=False) |
|---|---|---|
and | 如果两个操作数都为真,则返回 True。 | x and y 是 False |
or | 如果至少一个操作数为真,则返回 True。 | x or y 是 True |
not | 反转逻辑状态(True 变为 False,False 变为 True)。 | not x 是 False |
逻辑运算符使用短路评估(short-circuiting):and 在第一个操作数为假时停止评估;or 在第一个操作数为真时停止评估。
#!/usr/bin/env python3age = 25has_permission = False
if age >= 18 and has_permission: print("Access granted.") # 访问被授权else: print("Access denied.") # 访问被拒绝
if age < 18 or age > 65: print("Eligible for discount.") # 符合折扣条件else: print("Standard price applies.") # 适用标准价格
print(f"Not has_permission: {not has_permission}") # has_permission 的非Python 成员运算符
Section titled “Python 成员运算符”这些运算符测试某个值是否存在于序列(sequence)(如列表、元组、字符串)中。假设 my_list = [1, 2, 3]:
| 运算符 | 描述 | 示例 (my_list = [1, 2, 3]) |
|---|---|---|
in | 如果值在序列中找到,则返回 True。 | 2 in my_list 是 True |
not in | 如果值不在序列中找到,则返回 True。 | 4 not in my_list 是 True |
#!/usr/bin/env python3my_list = [1, 2, 3, 'a', 'b']name = "Python"
print(f"Is 3 in my_list? {3 in my_list}") # 3 在 my_list 中吗?print(f"Is 'c' not in my_list? {'c' not in my_list}") # 'c' 不在 my_list 中吗?print(f"Is 'th' in name? {'th' in name}") # 'th' 在 name 中吗?Python 身份运算符
Section titled “Python 身份运算符”这些运算符比较两个对象的内存地址(memory locations),检查它们是否是完全相同的对象(object),而不仅仅是值相等。
| 运算符 | 描述 | 示例 |
|---|---|---|
is | 如果两个变量指向同一个对象,则返回 True。 | x is y |
is not | 如果变量指向不同的对象,则返回 True。 | x is not y |
使用 is 时要小心。对于像整数(较小的)和字符串这样的不可变类型(immutable types),Python 可能会重用对象,导致 is 意外地返回 True。它主要用于检查单例(singletons),如 None。
#!/usr/bin/env python3a = [1, 2, 3]b = [1, 2, 3]c = a
print(f"a == b: {a == b}") # True (值相等)print(f"a is b: {a is b}") # False (内存中的不同对象)print(f"a == c: {a == c}") # True (值相等)print(f"a is c: {a is c}") # True (指向同一个对象)
# 'is' 的常见用例value = Noneif value is None: print("Value is None")
if value is not None: print("Value is not None")Python 位运算符
Section titled “Python 位运算符”这些运算符直接对整数的二进制(位)表示执行操作。它们在一般脚本中不那么常见,但在特定领域(如低级编程或数据操作)中使用。假设 a = 60 (0011 1100) 和 b = 13 (0000 1101):
| 运算符 | 名称 | 描述 | 示例 (a=60, b=13) |
|---|---|---|---|
| & | 按位与 | 如果对应的两个位都是 1,则将该位设置为 1。 | a & b 是 12 (0000 1100) |
| | | 按位或 | 如果对应的两个位中至少有一个是 1,则将该位设置为 1。 | a | b 是 61 (0011 1101) |
| ^ | 按位异或 | 如果对应的两个位中只有一个是 1,则将该位设置为 1。 | a ^ b 是 49 (0011 0001) |
| ~ | 按位非(补码) | 反转所有位(0 变为 1,1 变为 0)。结果取决于有符号表示。 | ~a 是 -61 |
| << | 左移 | 将位左移,用零填充(乘以 2^n)。 | a << 2 是 240 (1111 0000) |
| >> | 右移 | 将位右移(除以 2^n,丢弃余数)。 | a >> 2 是 15 (0000 1111) |
你可以使用内置的 bin() 函数查看二进制表示:
#!/usr/bin/env python3a = 60b = 13print(f"a = {a} ({bin(a)}), b = {b} ({bin(b)})") # a = 60 (0b111100), b = 13 (0b1101)print(f"a & b = {a & b} ({bin(a & b)})") # a & b = 12 (0b1100)print(f"a | b = {a | b} ({bin(a | b)})") # a | b = 61 (0b111101)print(f"a ^ b = {a ^ b} ({bin(a ^ b)})") # a ^ b = 49 (0b110001)print(f"~a = {~a} ({bin(~a)}) # 注意:使用补码表示")print(f"a << 2 = {a << 2} ({bin(a << 2)})") # a 左移 2 位print(f"a >> 2 = {a >> 2} ({bin(a >> 2)})") # a 右移 2 位Python 运算符优先级
Section titled “Python 运算符优先级”当表达式包含多个运算符时,Python 遵循特定的优先级顺序来确定先执行哪个操作。括号 () 可以用来覆盖这个顺序。
下表列出了从最高优先级(最先执行)到最低优先级的运算符:
| 优先级 | 运算符 | 描述 |
|---|---|---|
| 最高 | () | 括号 |
** | 幂运算 | |
+x, -x, ~x | 一元加、减、按位非 | |
*, /, //, % | 乘法、除法、整除、取模 | |
+, - | 加法、减法 | |
<<, >> | 位移 | |
& | 按位与 | |
^ | 按位异或 | |
| | 按位或 | |
in, not in, is, is not, <, <=, >, >=, !=, == | 比较、成员、身份运算符 | |
not x | 逻辑非 | |
and | 逻辑与 | |
| 最低 | or | 逻辑或 |
示例:
#!/usr/bin/env python3result = 5 + 3 * 2 # 乘法 (*) 的优先级高于加法 (+)print(f"5 + 3 * 2 = {result}") # 输出: 11
result = (5 + 3) * 2 # 括号覆盖了优先级print(f"(5 + 3) * 2 = {result}") # 输出: 16
result = 10 / 2 + 3 # 除法 (/) 的优先级高于加法 (+)print(f"10 / 2 + 3 = {result}") # 输出: 8.0