在 Python 3 中,运算符是用于执行变量和值之间操作的符号。Python 的运算符设计得非常直观且富有表现力。
以下是 Python 3 运算符的全面分类与详细解析:
1. 算术运算符 (Arithmetic Operators)
用于基本的数学计算。
| 运算符 | 描述 | 示例 (设 a=10, b=3) | 结果 |
|---|---|---|---|
+ | 加法 | a + b | 13 |
- | 减法 | a - b | 7 |
* | 乘法 | a * b | 30 |
/ | 真除法 (返回浮点数) | a / b | 3.3333333333333335 |
// | 地板除/整除 (向下取整) | a // b | 3 |
% | 取模 (返回余数) | a % b | 1 |
** | 幂 (指数) | a ** b | 1000 |
💡 注意:// 是向下取整。例如 -10 // 3 的结果是 -4(因为 -3.33 向下取整是 -4),而不是 -3。
2. 比较运算符 (Comparison Operators)
用于比较两个值,结果总是返回布尔值 (True 或 False)。
| 运算符 | 描述 | 示例 (设 a=10, b=3) |
|---|---|---|
== | 等于 (比较值是否相等) | a == b ➔ False |
!= | 不等于 | a != b ➔ True |
> | 大于 | a > b ➔ True |
< | 小于 | a < b ➔ False |
>= | 大于等于 | a >= 10 ➔ True |
<= | 小于等于 | b <= 3 ➔ True |
🌟 Python 特色:链式比较
Python 允许将比较运算符连起来写,这在数学上非常直观:
x = 5
if 1 < x < 10: # 等价于 x > 1 and x < 10
print("x 在 1 和 10 之间")3. 赋值运算符 (Assignment Operators)
用于给变量赋值。除了基本的 =,还有复合赋值运算符,它们在修改变量的同时进行赋值。
| 运算符 | 等价于 | 示例 (设 a=10) |
|---|---|---|
= | a = 10 | a = 10 |
+= | a = a + 2 | a += 2 (a 变为 12) |
-= | a = a - 2 | a -= 2 (a 变为 8) |
*= | a = a * 2 | a *= 2 (a 变为 20) |
/= | a = a / 2 | a /= 2 (a 变为 5.0,注意变成浮点数) |
//= | a = a // 2 | a //= 2 (a 变为 5) |
%= | a = a % 3 | a %= 3 (a 变为 1) |
**= | a = a ** 2 | a **= 2 (a 变为 100) |
4. 逻辑运算符 (Logical Operators)
用于组合条件语句。注意,Python 中的逻辑运算符是英文单词,而不是符号(如 &&, ||)。
| 运算符 | 描述 | 示例 |
|---|---|---|
and | 逻辑与 (两个都为 True 才返回 True) | True and False ➔ False |
or | 逻辑或 (只要有一个为 True 就返回 True) | True or False ➔ True |
not | 逻辑非 (取反) | not True ➔ False |
🌟 Python 特色:短路求值与返回实际值
逻辑运算符不一定返回 True 或 False,它们会返回决定结果的那个操作数的实际值:
# and: 如果第一个值为 False (或假值),直接返回第一个值;否则返回第二个值。
print(0 and 5) # 输出: 0 (0 是假值,短路返回 0)
print(3 and 5) # 输出: 5 (3 是真值,返回第二个值 5)
# or: 如果第一个值为 True (或真值),直接返回第一个值;否则返回第二个值。
print(3 or 5) # 输出: 3 (3 是真值,短路返回 3)
print(0 or 5) # 输出: 5 (0 是假值,返回第二个值 5)
# 常见用法:为变量设置默认值
name = user_input or "Anonymous" # 如果 user_input 为空,则 name 为 "Anonymous"5. 成员运算符 (Membership Operators)
用于测试一个值是否存在于序列(如字符串、列表、元组、字典)中。这是 Python 非常优雅的特性。
| 运算符 | 描述 | 示例 |
|---|---|---|
in | 如果在序列中找到值,返回 True | 'a' in 'apple' ➔ True |
not in | 如果在序列中没找到值,返回 True | 'z' not in 'apple' ➔ True |
my_list = [1, 2, 3]
print(2 in my_list) # True
my_dict = {"name": "Alice", "age": 25}
print("name" in my_dict) # True (检查的是字典的键,而不是值)
print("Alice" in my_dict) # False6. 身份运算符 (Identity Operators)
用于比较两个对象的内存地址是否相同,即它们是否是同一个对象。
| 运算符 | 描述 | 示例 |
|---|---|---|
is | 如果两个变量指向同一个对象,返回 True | a is b |
is not | 如果两个变量指向不同对象,返回 True | a is not b |
⚠️ 核心避坑:is vs ==
==比较的是值 (Value) 是否相等。is比较的是内存地址 (Identity) 是否相同 (等价于id(a) == id(b))。
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b) # True (值相等)
print(a is b) # False (是两个不同的列表对象,内存地址不同)
print(a is c) # True (c 和 a 指向同一个列表对象)(注:对于小整数 -5 到 256 以及短字符串,Python 解释器有缓存机制,is 可能会返回 True,但这属于实现细节,不应在业务逻辑中依赖它。)
7. 位运算符 (Bitwise Operators)
将数字看作二进制来进行逐位运算。日常业务开发较少使用,但在底层编程、加密或算法题中常见。
(假设 a = 60 (二进制 0011 1100), b = 13 (二进制 0000 1101))
| 运算符 | 描述 | 示例 | 结果 (十进制) |
|---|---|---|---|
& | 按位与 (两位都为 1 则为 1) | a & b | 12 (0000 1100) |
| | 按位或 (有一位为 1 则为 1) | a | b | 61 (0011 1101) |
^ | 按位异或 (两位不同则为 1) | a ^ b | 49 (0011 0001) |
~ | 按位取反 | ~a | -61 |
<< | 左移 (乘以 2 的 n 次方) | a << 2 | 240 |
>> | 右移 (除以 2 的 n 次方并向下取整) | a >> 2 | 15 |
8. 海象运算符 (Walrus Operator :=) 🌟
这是 Python 3.8 引入的新运算符。它允许你在表达式内部为变量赋值,从而减少代码行数,避免重复计算。
# 传统写法 (需要两行)
text = "Hello, World!"
if len(text) > 5:
print(f"文本长度为 {len(text)}")
# 使用海象运算符 (一行搞定)
if (n := len(text)) > 5:
print(f"文本长度为 {n}")
# 在 while 循环中读取数据时非常有用
while (line := file.readline()) != "":
print(line.strip())9. 运算符优先级 (Operator Precedence)
当表达式中包含多个运算符时,Python 会按照优先级从高到低进行计算。
(从高到低排列,同一行优先级相同)
(): 括号 (最高优先级,强烈建议用括号来明确你的意图)**: 指数~,+,-: 按位取反,一元加号和减号 (如-5)*,/,//,%: 乘、除、整除、取模+,-: 加法、减法<<,>>: 位移&: 按位与^: 按位异或\|: 按位或in,not in,is,is not,<,<=,>,>=,!=,==: 比较、成员、身份运算符not: 逻辑非and: 逻辑与or: 逻辑或 (最低优先级)
💡 最佳实践:不要死记硬背优先级。如果表达式稍微复杂,直接使用括号 (),这不仅能让代码逻辑更清晰,还能避免潜在的 Bug。
例如:(a + b) * c 永远比 a + b * c 更不容易引起误解。
如果你对其中某个运算符(比如位运算的具体应用场景,或者海象运算符的更多用法)有疑问,欢迎随时提问!