Appearance
04|数字与运算
Python 处理数字的能力覆盖了日常计算的大部分场景。理解数字类型和运算符的行为,能避免"2 除以 3 等于 0"这类意外结果。
一、整数
Python 的 int 可以表示任意大小的整数,不受固定位数限制。
python
a = 42
b = -10
c = 1_000_000 # 下划线分隔,提升可读性,值是 1000000进制表示:
python
0b1010 # 二进制,等于十进制 10
0o17 # 八进制,等于十进制 15
0xFF # 十六进制,等于十进制 255进制转换函数:
python
bin(10) # '0b1010'
oct(15) # '0o17'
hex(255) # '0xff'
int("0b1010", 2) # 10,从字符串按指定进制转整数二、浮点数
python
pi = 3.14159
scientific = 1.23e4 # 科学计数法,等于 12300.0浮点数遵循 IEEE 754 标准,存在精度问题:
python
0.1 + 0.2 # 0.30000000000000004,不是精确的 0.3比较浮点数时,不要用 ==,而用误差范围:
python
abs(0.1 + 0.2 - 0.3) < 1e-9 # True需要精确小数计算时,用 decimal 模块:
python
from decimal import Decimal
a = Decimal("0.1")
b = Decimal("0.2")
a + b # Decimal('0.3')注意 Decimal("0.1") 传入的是字符串。传入浮点数 Decimal(0.1) 会先引入浮点精度误差,再转 Decimal 也救不回来。
三、算术运算符
python
a + b # 加法
a - b # 减法
a * b # 乘法
a / b # 除法,结果总是浮点数
a // b # 整除(地板除),结果向下取整
a % b # 取余
a ** b # 幂运算
-a # 取负关键区别:
python
7 / 2 # 3.5,普通除法
7 // 2 # 3,整除
7 % 2 # 1,取余整除对负数的行为需要留意:
python
-7 // 2 # -4,向下取整(往负无穷方向)
-7 % 2 # 1,结果始终与除数同号四、复合赋值
python
x = 10
x += 5 # x = x + 5,现在 x 是 15
x -= 3 # x = x - 3
x *= 2 # x = x * 2
x //= 4 # x = x // 4复合赋值是先计算等号右边的完整表达式,再赋值:
python
x = 5
x += 2 + 3 # 等价于 x = x + (2 + 3),x 变成 10五、类型转换
python
int(3.7) # 3,截断小数部分(不是四舍五入)
int("42") # 42,字符串转整数
int("FF", 16) # 255,按十六进制解析
float(3) # 3.0
float("3.14") # 3.14
str(42) # '42'
str(3.14) # '3.14'转换失败时抛出异常:
python
int("hello") # ValueError: invalid literal for int()
float("") # ValueError: could not convert string to float六、内置数学函数
python
abs(-10) # 10,绝对值
round(3.7) # 4,四舍五入
round(2.5) # 2,银行家舍入法(偶数优先)
round(3.14159, 2) # 3.14,保留两位小数
max(1, 5, 3) # 5
min(1, 5, 3) # 1
sum([1, 2, 3]) # 6
pow(2, 3) # 8,等于 2**3
pow(2, 3, 5) # 3,(2**3) % 5,效率更高更复杂的数学运算(三角函数、对数、平方根等)在 math 模块里:
python
import math
math.sqrt(16) # 4.0
math.ceil(3.2) # 4,向上取整
math.floor(3.9) # 3,向下取整
math.pi # 3.141592653589793记忆锚点:/ 总是返回浮点数,// 是整除;浮点数有精度问题,精确计算用 Decimal;int() 截断不是四舍五入;round(2.5) 等于 2(偶数优先);负数整除向负无穷方向取整。