Python random
Python3 学习笔记 · 整理自菜鸟教程
一句话
random 是标准库随机数模块,用于生成随机数、随机选择、随机打乱序列。
要点
- 生成的是伪随机数,底层用梅森旋转算法。
random()返[0.0, 1.0)的浮点;randint(a, b)返闭区间整数。choice选一个、choices选多个(可重复)、sample选多个(不重复)。shuffle原地打乱列表,无返回值。seed(n)固定随机种子,让结果可复现,调试和测试常用。- 安全场景(密码、令牌)不要用
random,改用secrets模块。
语法 / 常用方法
| 方法 | 说明 | 示例 |
|---|---|---|
random.random() |
[0.0, 1.0) 浮点 |
0.548813... |
random.uniform(a, b) |
[a, b] 浮点 |
uniform(1, 5) |
random.randint(a, b) |
[a, b] 整数(含两端) |
randint(1, 6) |
random.randrange(a, b, step) |
range 里随机取 |
randrange(0, 10, 2) |
random.choice(seq) |
随机取一个元素 | choice(["A", "B"]) |
random.choices(seq, k=n) |
取 n 个,可重复,可加权 | choices([1,2], k=3) |
random.sample(seq, k=n) |
取 n 个,不重复 | sample(range(10), 3) |
random.shuffle(lst) |
原地打乱 | shuffle(cards) |
random.seed(n) |
设随机种子 | seed(42) |
random.gauss(mu, sigma) |
正态分布 | gauss(0, 1) |
random.getrandbits(k) |
k 位随机整数 | getrandbits(8) |
代码示例
1 | |
易错点
randint(a, b)两端都包含,range(a, b)不包含,randrange与range规则一致。shuffle原地修改且返回None,写nums = random.shuffle(nums)会把列表变None。sample的k不能大于序列长度,否则抛ValueError;choices的k无此限制。seed只需设一次,重复设种子会让随机退化,失去随机意义。- 涉及安全(验证码、密钥、令牌)必须用
secrets,random可被预测。 - 多进程里各自
random可能产生相同序列,用进程独立种子或用numpy.random。