Python 支持三种核心数字类型:整数、浮点数和复数。数字类型具有不可变性,运算时自动类型转换。
一、数字类型分类
类型 | 表示法 | 示例 | 特点 |
---|---|---|---|
整数 (int) | 十进制 二进制(0b) 八进制(0o) 十六进制(0x) | 42 0b1010 (10) 0o52 (42) 0x2A (42) | 任意大整数 无大小限制 |
浮点数 (float) | 小数形式 科学计数法 | 3.14 2.5e-3 (0.0025) | 双精度浮点数 可能存在精度误差 |
复数 (complex) | a + bj | 3 + 4j complex(2, -1) (2 - 1j) | 实部+虚部 j为虚数单位 |
布尔值 (bool) 是整数子类:
True == 1, False == 0
二、基本数值运算
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 5 + 3.2 | 8.2 |
- | 减法 | 10 - 4 | 6 |
* | 乘法 | 7 * 2 | 14 |
/ | 真除法 | 10 / 3 | 3.333... |
// | 整除 | 10 // 3 | 3 |
% | 取模 | 10 % 3 | 1 |
** | 幂运算 | 2 ** 8 | 256 |
@ | 矩阵乘 | numpy专用 | - |
三、高级数值操作
1. 类型转换
int(3.99) # 3 (截断小数)
float(8) # 8.0
complex(5) # (5+0j)
2. 比较运算
# 链式比较
x = 5
1 < x <= 10 # True
# 浮点数相等判断 (避免直接比较)
abs(0.1 + 0.2 - 0.3) < 1e-9 # True
3. 位运算 (仅整数)
bin(0b1010 & 0b1100) # '0b1000' (AND)
bin(0b1010 | 0b1100) # '0b1110' (OR)
bin(0b1010 ^ 0b1100) # '0b0110' (XOR)
bin(~0b1010) # '-0b1011' (NOT)
bin(0b1010 << 2) # '0b101000' (左移)
bin(0b1010 >> 1) # '0b101' (右移)
4. 分数表示
from fractions import Fraction
Fraction(3, 4) # 3/4 (避免浮点误差)
Fraction(0.25) # 1/4
四、数学模块 (math)
import math
# 常用函数
math.sqrt(25) # 5.0 (平方根)
math.pow(2, 3) # 8.0 (幂运算)
math.log(100, 10) # 2.0 (对数)
math.exp(1) # ~2.718 (e的幂)
# 三角函数 (弧度制)
math.sin(math.pi/2) # 1.0
math.degrees(math.pi) # 180.0 (弧度转角度)
# 常数
math.pi # π ≈ 3.141592653589793
math.e # 自然常数 ≈ 2.718281828459045
math.tau # 2π ≈ 6.283185307179586
# 特殊函数
math.gcd(48, 18) # 6 (最大公约数)
math.comb(5, 2) # 10 (组合数)
math.perm(5, 2) # 20 (排列数)
math.isclose(0.1+0.2, 0.3) # True (浮点数近似比较)
五、复数模块 (cmath)
import cmath
z = 3 + 4j
cmath.phase(z) # 0.927295 (相位角/弧度)
cmath.polar(z) # (5.0, 0.927295) (极坐标)
abs(z) # 5.0 (模长)
cmath.exp(z) # e^z
cmath.sqrt(-1) # 1j (复数平方根)
六、高精度计算 (decimal)
解决浮点数精度问题:
from decimal import Decimal, getcontext
# 设置精度
getcontext().prec = 6 # 6位有效数字
Decimal('0.1') + Decimal('0.2') # Decimal('0.3') (精确计算)
Decimal(0.1) + Decimal(0.2) # 0.300000000000000016... (错误用法)
七、随机数模块 (random)
import random
random.random() # [0,1) 随机浮点数
random.uniform(1.5, 2.5) # 指定范围浮点数
random.randint(1, 10) # [1,10] 随机整数
random.choice(['A','B','C']) # 随机选择元素
random.sample(range(100), 5) # 随机抽样5个
八、数值技巧与陷阱
技巧:
# 千分位分隔符 (Python 3.6+)
num = 10_000_000 # 更易读
# 交换变量
a, b = b, a
# 海象运算符 (Python 3.8+)
if (n := len(data)) > 10:
print(f"数据过大: {n}项")
陷阱:
# 1. 浮点数精度问题
0.1 + 0.2 == 0.3 # False
# 2. 整数除法 vs 浮点除法
10 / 3 # 3.333... (浮点)
10 // 3 # 3 (整除)
# 3. 类型转换截断
int("3.14") # ValueError
int(float("3.14")) # 3 (先转浮点)
# 4. 复数运算限制
(2 + 3j) // 4 # TypeError (复数不支持整除)
九、类型检查与判断
type(5) is int # True
isinstance(3.14, float) # True
# 检查是否数字类型
def is_number(x):
return isinstance(x, (int, float, complex))
十、进制转换
bin(42) # '0b101010' (十进制→二进制)
oct(42) # '0o52' (十进制→八进制)
hex(42) # '0x2a' (十进制→十六进制)
# 其他进制转十进制
int('1010', 2) # 10 (二进制→十进制)
int('2A', 16) # 42 (十六进制→十进制)