Python 的 random
模块提供了生成伪随机数的工具,可用于模拟随机过程、生成测试数据、实现随机化算法等场景。以下是该模块的核心功能和常见用法:
1. 随机数生成基础
1.1 浮点数随机数
python
import random
# 生成 [0.0, 1.0) 范围内的随机浮点数
random.random()
# 生成 [a, b] 范围内的随机浮点数
random.uniform(1, 10)
1.2 整数随机数
python
# 生成 [a, b] 范围内的随机整数(包含两端)
random.randint(1, 6) # 模拟掷骰子
# 从 range(a, b, step) 中随机选择一个整数
random.randrange(0, 100, 2) # 随机偶数
2. 序列操作
2.1 随机选择元素
python
# 从非空序列中随机选择一个元素
random.choice(['apple', 'banana', 'cherry'])
# 从非空序列中随机选择 k 个元素(可重复)
random.choices(['red', 'green', 'blue'], k=3) # 可能重复
2.2 打乱序列
python
# 原地打乱列表元素的顺序(直接修改原列表)
items = [1, 2, 3, 4, 5]
random.shuffle(items)
print(items) # 例如:[3, 1, 5, 4, 2]
2.3 随机采样
python
# 从序列中随机选择 k 个不重复的元素
random.sample(range(100), k=5) # 常用于抽奖
3. 概率分布
python
# 正态分布(高斯分布)
random.gauss(mu=0, sigma=1) # 均值 mu,标准差 sigma
# 其他分布:指数分布、贝塔分布等
random.expovariate(lambd=0.5) # 指数分布
4. 随机数生成器种子(Seed)
通过设置相同的种子,可以重现相同的随机序列,常用于测试。
python
random.seed(42) # 设置种子
print(random.random()) # 输出固定值:0.6394267984578837
random.seed(42) # 重置种子
print(random.random()) # 再次输出相同值
5. 安全随机数(加密场景)
若需生成密码学安全的随机数(如令牌、密钥),建议使用 secrets
模块:
python
import secrets
# 生成安全的随机整数
secrets.randbelow(100) # 0-99 范围内的安全随机数
# 生成安全的随机字节
secrets.token_bytes(16) # 16 字节随机数据(适用于生成密钥)
注意事项
- 伪随机性:
random
生成的是伪随机数,由确定性算法根据种子计算。 - 线程安全:多线程环境下,每次调用
random
函数会自动加锁,避免冲突。 - 加密安全:
random
不适合用于加密场景,需使用secrets
或os.urandom
。