跳到主要内容

表达式、数值与运算

这篇是 Python 主线里最基础的一页。目标不是把所有运算符背一遍,而是先建立几个稳定印象:

  • Python 里常用的数值类型是什么
  • + - * / // % ** 到底分别代表什么
  • 哪些地方很容易写对语法、写错结果

常见数值类型

a = 10       # int
b = 3.14 # float
c = 2 + 3j # complex

日常开发里,最常碰到的是 intfloat

基本运算符

print(10 + 3)   # 13
print(10 - 3) # 7
print(10 * 3) # 30
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3
print(10 % 3) # 1
print(10 ** 3) # 1000

我最常提醒自己的三个区别

  • /:真除法,结果通常是浮点数
  • //:整除,直接保留商的整数部分
  • %:取余

运算优先级

和大多数语言一样,乘除优先于加减;不确定时直接加括号。

result = 2 + 3 * 4      # 14
result = (2 + 3) * 4 # 20

我自己的习惯是:只要表达式稍微长一点,就主动加括号换清晰度,不跟优先级赌记忆。

比较运算与逻辑运算

print(3 > 2)                   # True
print(3 == 2) # False
print(3 > 2 and 5 > 1) # True
print(3 > 2 or 5 < 1) # True
print(not (3 > 2)) # False

这里最容易混的是:

  • = 是赋值
  • == 才是判断是否相等

常见内置运算函数

print(abs(-10))          # 10
print(round(3.14159, 2)) # 3.14
print(pow(2, 5)) # 32
print(divmod(10, 3)) # (3, 1)

如果只是做基础数学运算,内置函数已经很够用;更系统一点的数学函数可以看 math 模块。

math 模块里常用的几项

import math

print(math.sqrt(16)) # 4.0
print(math.floor(3.8)) # 3
print(math.ceil(3.2)) # 4
print(math.pi) # 3.141592653589793

浮点数不要想得太理想

初学时很容易觉得 0.1 + 0.2 应该严格等于 0.3,但浮点数不是这么工作的:

print(0.1 + 0.2)         # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False

比较浮点数时,更稳妥的方式是看差值是否足够小:

print(abs((0.1 + 0.2) - 0.3) < 1e-9)

一个更实用的理解方式

这部分我会优先记住下面几件事:

  • 数值运算先分清 ///%
  • 表达式长了就加括号
  • 浮点数比较不要硬用 ==
  • 常用数学工具先想到 abs()round()divmod()math

关联阅读