Python 运算符

运算符是"对数据做什么操作"的符号——加、减、比较、判断……这一章把 Python 全部运算符过一遍,每个都配上可运行代码。重点掌握算术、比较、逻辑,成员和身份运算符是 Python 特色,位运算了解即可。

1. 算术运算符

# 加减乘除
print(5 + 3)      # 8
print(5 - 3)      # 2
print(5 * 3)      # 15
print(5 / 2)      # 2.5   (注意:/ 总是返回浮点数,即使整除)
print(4 / 2)      # 2.0   (也是浮点)

# 取整除 //(向下取整)
print(5 // 2)     # 2
print(-5 // 2)    # -3    (注意是向下取整,不是向零取整)

# 取余 %(模运算)
print(5 % 2)      # 1
print(10 % 3)     # 1
print(-5 % 3)     # 1     (Python 的 % 结果符号跟除数一致)

# 幂运算 **(Python 特有,不用 pow() 也行)
print(2 ** 10)    # 1024
print(9 ** 0.5)   # 3.0   (开平方)

# 判断奇偶的常用技巧
n = 7
print(n % 2 == 0) # False (奇数)

几个 Python 特色值得记住:

2. 比较运算符

# 等于 / 不等于
print(1 == 1)         # True
print(1 != 2)         # True

# 大小比较
print(3 > 2)          # True
print(3 < 2)          # False
print(3 >= 3)         # True
print(3 <= 4)         # True

# Python 特色:链式比较,比很多语言优雅
age = 18
print(0 < age < 100)  # True   (等价于 0 < age and age < 100)

# 字符串也能比较(按字典序)
print("apple" < "banana")    # True
print("abc" == "abc")        # True

链式比较 0 < x < 100 是 Python 的优雅写法,等价于 0 < x and x < 100。很多语言不支持这种写法,需要写两个判断。

3. 逻辑运算符 and / or / not

注意:Python 用英文单词 and / or / not,不是 C/Java 的 && / || / !

# 逻辑运算:and(与)、or(或)、not(非)
print(True and False)    # False
print(True or False)     # True
print(not True)          # False

# 实际场景:组合多个条件
age = 25
has_id = True
print(age >= 18 and has_id)    # True  (成年且有证件)

# Python 特色:and/or 返回的是其中一个操作数,而不是布尔值
# x and y:如果 x 为真,返回 y;否则返回 x
print(0 and 100)         # 0     (0 是 falsy,直接返回 0)
print(5 and 100)         # 100   (5 是 truthy,返回后面的 100)

# x or y:如果 x 为真,返回 x;否则返回 y
print("" or "默认值")    # 默认值 (空字符串 falsy,返回后面的)
print(0 or 42)           # 42

# 常用技巧:给变量设默认值
name = input("名字:") or "匿名"
# 如果用户直接回车(input 返回""),name 就是"匿名"

and/or 返回操作数本身(不是布尔值)这个特性很实用。比如 name = input() or "匿名" 一行就能给输入设默认值——这种写法在 Python 里随处可见。

4. 赋值运算符与海象

# 基本赋值
x = 10

# 复合赋值运算符(算术运算 + 赋值的简写)
x += 5      # 等价于 x = x + 5
x -= 3      # x = x - 3
x *= 2      # x = x * 2
x /= 4      # x = x / 4
x //= 2     # x = x // 2
x %= 3      # x = x % 3
x **= 2     # x = x ** 2

# 海象运算符 := (Python 3.8+)
# 在表达式内部"赋值并使用",省去一行
# 传统写法
text = "hello world"
n = len(text)
if n > 5:
    print(f"字符串太长了:{n} 个字符")

# 用海象一行搞定
if (n := len(text)) > 5:
    print(f"字符串太长了:{n} 个字符")

海象运算符 :=(Python 3.8+ 引入)是新特性,作用是"在表达式内部赋值并使用"。它能在 if、while、列表推导式里减少重复调用,是个非常 Pythonic 的写法。

5. 成员运算符 in

in 是 Python 里极其常用的运算符,用来判断元素是否在序列/集合/字典里。

# 成员运算符 in / not in:判断元素是否在序列/集合里
fruits = ["apple", "banana", "cherry"]
print("apple" in fruits)        # True
print("orange" not in fruits)   # True

# 字符串里也常用
print("hell" in "hello")        # True
print("a" not in "xyz")         # True

# 字典里 in 判断的是 key(不是 value)
user = {"name": "小明", "age": 20}
print("name" in user)           # True
print("小明" in user)           # False (值不在 key 里)

# in 配合 for 循环遍历
for fruit in fruits:
    print(fruit)

6. 身份运算符 is

is 判断两个变量是否指向同一个对象(身份相同),而 == 只判断值是否相等。两者含义不同。

# 身份运算符 is / is not:判断两个变量是否指向同一个对象
a = [1, 2, 3]
b = a              # b 指向同一个列表
c = [1, 2, 3]      # 内容相同,但是新对象

print(a is b)      # True   (同一对象)
print(a is c)      # False  (不同对象,即使内容一样)
print(a == c)      # True   (== 比较内容)

# is 的经典应用:判断 None
x = None
if x is None:
    print("x 是空值")

# 小整数缓存:Python 缓存了 -5 到 256 的整数
m = 100
n = 100
print(m is n)      # True   (指向缓存里同一个对象)

# 大整数不缓存
p = 1000
q = 1000
print(p is q)      # 可能 False(取决于实现,不要依赖!)

经验法则:判断值用 ==,判断 None 用 is。判断 True/False 也推荐用 is(但日常 if x: 就够了,不需要写 if x is True:)。

7. 位运算符

位运算直接操作整数的二进制位,日常业务很少用,主要在底层开发、加密、性能优化场景出现。了解概念即可。

# 位运算:直接对整数的二进制位操作,日常写业务很少用
# 主要场景:底层开发、加密、性能优化、状态码

a = 0b1100        # 12
b = 0b1010        # 10

print(a & b)      # 8   (0b1000  按位与)
print(a | b)      # 14  (0b1110  按位或)
print(a ^ b)      # 6   (0b0110  按位异或)
print(~a)         # -13 (按位取反)
print(a << 2)     # 48  (左移 2 位,相当于 a * 4)
print(a >> 2)     # 3   (右移 2 位,相当于 a // 4)

# 实用例子:用位运算管理标志位(比多个布尔变量更省内存)
# 假设 4 种权限:读=1, 写=2, 执行=4, 删除=8
perm = 0
perm |= 1         # 加读权限
perm |= 2         # 加写权限
print(perm & 1)   # 1 (有读权限)
print(perm & 4)   # 0 (没有执行权限)

8. 运算符优先级

不需要死记,但要有大致印象。优先级从高到低:

# 运算符优先级(从高到低,常用部分)
# 1. **            幂运算
# 2. ~ + -         按位取反、正负号(一元)
# 3. * / // %      乘除
# 4. + -           加减
# 5. << >>         移位
# 6. & ^ |         位运算
# 7. < > <= >= == !=  比较
# 8. not and or    逻辑

# 不确定优先级时,直接加括号,可读性更好
result = (2 + 3) * 4     # 20  (不是 14)
print(result)

# 复杂条件,加括号让人一眼看懂
if (age >= 18 and has_id) or has_guardian:
    pass

实际建议:不确定就加括号,代码可读性比"少写两个字符"重要得多。

小结

这一章学了 Python 全部运算符。算术注意 / 总返回浮点、// 取整除、** 幂;逻辑and/or/not;成员in;身份is(判断 None 必用)。还学了 := 海象运算符这种 Pythonic 写法。下一篇看字符串——Python 里最重要的数据类型之一。

← 上一篇 Python 数据类型

下一篇 Python 字符串

✈️💬