Python运算符是写在表达式里、用来做运算或判断的符号,比如 +、/、==、and。Python 语言里它们覆盖算术、比较、逻辑、赋值,还有 is、in 以及较少用到的位运算。
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,判断值相等用==? - 优先级不确定时有没有加括号?