random 是 Python 标准库中用于生成伪随机数的模块,提供了丰富的随机数生成和随机操作功能,适用于模拟、抽样、打乱顺序等场景。它生成的随机数基于特定算法(伪随机),但对大多数应用场景已足够 "随机"。
最基础的随机函数,返回一个大于等于 0.0 且小于 1.0 的浮点数。
import random
print(random.random())
返回一个在 a 和 b 之间(包含两端)的随机浮点数,若 a > b 则自动交换范围。
print(random.uniform(1, 5))
返回一个大于等于 a 且小于等于 b 的整数(包含两端),要求 a <= b,否则报错。
print(random.randint(1, 10))
从 range(start, stop, step) 序列中随机选择一个整数,不包含 stop(与 range 规则一致)。
若序列为空(如空列表),会抛出 IndexError。
fruits = ["苹果", "香蕉", "橙子", "草莓"]
print(random.choice(fruits))
population:待选择的序列
weights:可选参数,为每个元素指定权重(概率),权重越高被选中概率越大
k:选择的数量(默认 1)
从序列中选择 k 个不重复的元素(要求 k <= len(population),否则报错)。
cards = ["红桃A", "方块5", "黑桃K", "梅花10", "大王"]
仅作用于可变序列(如列表),不可作用于字符串、元组等不可变序列。
arr = [1, 2, 3, 4, 5]
random.shuffle(arr)
random 模块生成的是 "伪随机数",其序列由初始 "种子" 决定。若设置相同的种子,每次运行会生成相同的随机序列,便于测试和复现。
通过 random.seed(a) 设置种子:
- 若不主动设置种子,默认使用系统时间(精确到微秒)作为种子,因此每次运行结果不同。
结合 string 模块(提供字母、数字等字符集),可生成随机密码、验证码等。
random.gauss(mu, sigma) 生成符合正态分布的随机数,mu 为均值,sigma 为标准差(更高效);random.normalvariate(mu, sigma) 功能相同,但性能略低。
- 伪随机性:
random 模块不适合加密场景(如生成密钥),加密需用 secrets 模块(Python 3.6+)。
- 线程安全:
random 模块的函数不是线程安全的,多线程环境下需加锁或使用 Random 类实例(每个线程一个实例)。
- 不可变序列:
shuffle() 不能直接作用于字符串 / 元组,需先转为列表:
s = "hello"
lst = list(s)
random.shuffle(lst)
print(''.join(lst))
random 模块覆盖了大多数随机操作需求,从基础的随机数生成到序列抽样、打乱等。核心函数包括:
- 浮点数:
random()、uniform()
- 整数:
randint()、randrange()
- 序列操作:
choice()、choices()、sample()、shuffle()
- 种子控制:
seed()