表达式中的运算符用于对数据进行算术运算、比较或逻辑组合。Python 提供算术、比较、逻辑、赋值等常用运算符,另有 is、in 及按位运算符。若将单个 = 误用于相等判断,或混淆 / 与 //,结果可能与预期不符。本节从一组数值运算入手,再按类别说明各类运算符的含义与注意点。

算术运算示例

x = 15
y = 4

print('x + y =', x + y)      # 19
print('x - y =', x - y)      # 11
print('x * y =', x * y)      # 60
print('x / y =', x / y)      # 3.75,/ 的结果总是浮点数
print('x // y =', x // y)    # 3,整除,向下取整
print('x ** y =', x ** y)    # 50625,幂运算

Python 的 / 对数值相除时结果类型为浮点数,这与 C 语言、Java 中两个整数相除常得到整数商的情形不同。若需要整除商,应使用 //。若需要余数,应使用 %。

算术运算符

运算符含义示例
+加x + y
-减 / 一元负号x - y
*乘x * y
/除(结果总是 float)x / y
%取余x % y
//整除(向下取整)x // y
**幂x ** y

比较运算符

比较运算的结果是 True 或 False:

x = 10
y = 12

print(x > y)    # False
print(x < y)    # True
print(x == y)   # False(注意是双等号)
print(x != y)   # True
print(x >= y)   # False
print(x <= y)   # True

判断相等必须使用 ==。单个 = 表示赋值。二者混用会导致语法错误或逻辑错误。

逻辑运算符

Python 使用关键字 and、or、not 进行逻辑运算:and 要求两侧均为真,or 在任一侧为真时为真,not 对布尔值取反。

x = True
y = False

print(x and y)   # False,两个都真才真
print(x or y)    # True,一个真就真
print(not x)     # False,取反

赋值运算符

= 表示简单赋值。复合赋值(如 a += 5)等价于 a = a + 5,对减、乘、整除、幂等运算有对应形式:

a = 10
a += 5    # a = a + 5 → 15
a -= 3    # a = a - 3 → 12
a *= 2    # a = a * 2 → 24
a //= 4   # a = a // 4 → 6
a **= 2   # a = a ** 2 → 36
print(a)  # 36

身份运算符 is / is not

is 判断两个名字是否绑定到同一对象,== 判断值是否相等。对内容相同但分别创建的可变对象,二者结果可能不一致:

x3 = [1, 2, 3]
y3 = [1, 2, 3]

print(x3 == y3)   # True,值相等
print(x3 is y3)   # False,是两个不同的列表对象

成员运算符 in / not in

in 用于判断元素是否出现在字符串、列表、元组等序列中。对字典则判断键是否存在:

s = 'Hello world'
d = {1: 'a', 2: 'b'}

print('H' in s)       # True,注意大小写敏感
print('hello' in s)   # False,小写 hello 不在
print(1 in d)         # True,1 是字典的键
print('a' in d)       # False,'a' 是值不是键

位运算符

位运算符按二进制位进行与、或、异或、取反及移位操作,在标志位、权限掩码等场景中使用:

x = 10  # 二进制 00001010
y = 4   # 二进制 00000100

print(x & y)    # 0
print(x | y)    # 14
print(x ^ y)    # 14
print(x << 2)  # 40,左移两位相当于乘 4
print(x >> 2)  # 2,右移两位相当于整除 4

运算符优先级

求值顺序不确定时,应使用括号明确意图。大致顺序为:算术运算(其中 ** 较高),再比较运算,最后逻辑运算。

print(2 + 3 * 4)      # 14,乘先算
print((2 + 3) * 4)    # 20,括号优先
print(True or False and False)   # True,and 比 or 优先级高

编写表达式时的核对项

  • 相等比较是否使用 == 而非 =?
  • 需要浮点商时用 /,需要整数商时用 //?
  • 同一对象用 is,值相等用 ==?
  • 优先级不明确时是否已加括号?

小结

编写表达式时应区分 == 与 =、/ 与 //,并在对象同一性与值相等之间正确选用 is 与 ==。

本节归纳了 Python 常用运算符及其优先级要点。下一节说明条件语句(if / elif / else)的写法。