Python运算符是写在表达式里、用来做运算或判断的符号,比如 +/==and。Python 语言里它们覆盖算术、比较、逻辑、赋值,还有 isin 以及较少用到的位运算。

15 / 4 得到 3.75,不是整数 3:除法默认出浮点,整除要写 //。比大小时相等判断必须用 ==,单个 = 只是赋值。

先算几组数

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 取反。

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,判断值相等用 ==
  • 优先级不确定时有没有加括号?