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 特色值得记住:
/总是返回浮点数,即使整除(7/2=3.5,4/2=2.0)。//是取整除(向下取整),不是四舍五入。**是幂运算,其他语言常用^但 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 字符串 →