Python 3 教程

Python3 运算符

在 Python 3 中,运算符是用于执行变量和值之间操作的符号。Python 的运算符设计得非常直观且富有表现力。

以下是 Python 3 运算符的全面分类与详细解析:


1. 算术运算符 (Arithmetic Operators)

用于基本的数学计算。

运算符描述示例 (设 a=10, b=3)结果
+加法a + b13
-减法a - b7
*乘法a * b30
/真除法 (返回浮点数)a / b3.3333333333333335
//地板除/整除 (向下取整)a // b3
%取模 (返回余数)a % b1
**幂 (指数)a ** b1000

💡 注意// 是向下取整。例如 -10 // 3 的结果是 -4(因为 -3.33 向下取整是 -4),而不是 -3


2. 比较运算符 (Comparison Operators)

用于比较两个值,结果总是返回布尔值 (TrueFalse)。

运算符描述示例 (设 a=10, b=3)
==等于 (比较值是否相等)a == bFalse
!=不等于a != bTrue
>大于a > bTrue
<小于a < bFalse
>=大于等于a >= 10True
<=小于等于b <= 3True

🌟 Python 特色:链式比较
Python 允许将比较运算符连起来写,这在数学上非常直观:

纯文本
plaintext
x = 5
if 1 < x < 10:  # 等价于 x > 1 and x < 10
    print("x 在 1 和 10 之间")

3. 赋值运算符 (Assignment Operators)

用于给变量赋值。除了基本的 =,还有复合赋值运算符,它们在修改变量的同时进行赋值。

运算符等价于示例 (设 a=10)
=a = 10a = 10
+=a = a + 2a += 2 (a 变为 12)
-=a = a - 2a -= 2 (a 变为 8)
*=a = a * 2a *= 2 (a 变为 20)
/=a = a / 2a /= 2 (a 变为 5.0,注意变成浮点数)
//=a = a // 2a //= 2 (a 变为 5)
%=a = a % 3a %= 3 (a 变为 1)
**=a = a ** 2a **= 2 (a 变为 100)

4. 逻辑运算符 (Logical Operators)

用于组合条件语句。注意,Python 中的逻辑运算符是英文单词,而不是符号(如 &&, ||)。

运算符描述示例
and逻辑与 (两个都为 True 才返回 True)True and FalseFalse
or逻辑或 (只要有一个为 True 就返回 True)True or FalseTrue
not逻辑非 (取反)not TrueFalse

🌟 Python 特色:短路求值与返回实际值
逻辑运算符不一定返回 TrueFalse,它们会返回决定结果的那个操作数的实际值

纯文本
plaintext
# 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
纯文本
plaintext
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) # False

6. 身份运算符 (Identity Operators)

用于比较两个对象的内存地址是否相同,即它们是否是同一个对象

运算符描述示例
is如果两个变量指向同一个对象,返回 Truea is b
is not如果两个变量指向不同对象,返回 Truea is not b

⚠️ 核心避坑:is vs ==

  • == 比较的是值 (Value) 是否相等。
  • is 比较的是内存地址 (Identity) 是否相同 (等价于 id(a) == id(b))。
纯文本
plaintext
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 指向同一个列表对象)

(注:对于小整数 -5256 以及短字符串,Python 解释器有缓存机制,is 可能会返回 True,但这属于实现细节,不应在业务逻辑中依赖它。)


7. 位运算符 (Bitwise Operators)

将数字看作二进制来进行逐位运算。日常业务开发较少使用,但在底层编程、加密或算法题中常见。
(假设 a = 60 (二进制 0011 1100), b = 13 (二进制 0000 1101))

运算符描述示例结果 (十进制)
&按位与 (两位都为 1 则为 1)a & b12 (0000 1100)
|按位或 (有一位为 1 则为 1)a | b61 (0011 1101)
^按位异或 (两位不同则为 1)a ^ b49 (0011 0001)
~按位取反~a-61
<<左移 (乘以 2 的 n 次方)a << 2240
>>右移 (除以 2 的 n 次方并向下取整)a >> 215

8. 海象运算符 (Walrus Operator :=) 🌟

这是 Python 3.8 引入的新运算符。它允许你在表达式内部为变量赋值,从而减少代码行数,避免重复计算。

纯文本
plaintext
# 传统写法 (需要两行)
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 会按照优先级从高到低进行计算。
(从高到低排列,同一行优先级相同)

  1. () : 括号 (最高优先级,强烈建议用括号来明确你的意图)
  2. ** : 指数
  3. ~, +, - : 按位取反,一元加号和减号 (如 -5)
  4. *, /, //, % : 乘、除、整除、取模
  5. +, - : 加法、减法
  6. <<, >> : 位移
  7. & : 按位与
  8. ^ : 按位异或
  9. \| : 按位或
  10. in, not in, is, is not, <, <=, >, >=, !=, == : 比较、成员、身份运算符
  11. not : 逻辑非
  12. and : 逻辑与
  13. or : 逻辑或 (最低优先级)

💡 最佳实践:不要死记硬背优先级。如果表达式稍微复杂,直接使用括号 (),这不仅能让代码逻辑更清晰,还能避免潜在的 Bug。
例如:(a + b) * c 永远比 a + b * c 更不容易引起误解。


如果你对其中某个运算符(比如位运算的具体应用场景,或者海象运算符的更多用法)有疑问,欢迎随时提问!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注