random --- 生成随机数

此模块实现了一个伪随机数生成器(PRNG)。该 PRNG 是一个 32 位的 Yasmarang 风格 LCG;首次导入时,它从 os.urandom() 所使用的同一硬件源中获取一个 32 位种子,之后的每个数都是该种子的确定性函数。

警告

其输出不具备加密安全性——该算法可以从一小段输出序列中预测出来,并且初始种子只携带 32 位的熵。对于密钥材料、会话令牌、密码盐值或任何其他安全敏感的用途,请改为调用 os.urandom()

备注

区间使用以下记号:

  • () 是开区间括号,不包含其端点。例如,(0, 1) 表示大于 0 且小于 1。用集合记号表示:(0, 1) = {x | 0 < x < 1}。

  • [] 是闭区间括号,包含其所有界点。例如,[0, 1] 表示大于或等于 0 且小于或等于 1。用集合记号表示:[0, 1] = {x | 0 <= x <= 1}。

整数相关函数

random.getrandbits(n: int) int

返回一个带有 n 个随机位的整数(0 <= n <= 32)。

random.randint(a: int, b: int) int

返回范围 [a, b] 内的一个随机整数。

random.randrange(start: int, stop: int | None = None, step: int = 1) int

第一种形式从范围 [0, stop) 返回一个随机整数。第二种形式从范围 [start, stop) 返回一个随机整数。第三种形式以 step 为步长从范围 [start, stop) 返回一个随机整数。例如,调用 randrange(1, 10, 2) 将返回 1 到 9(含)之间的奇数。

浮点数相关函数

random.random() float

返回范围 [0.0, 1.0) 内的一个随机浮点数。

random.uniform(a: float, b: float) float

返回一个随机浮点数 N,当 a <= b 时满足 a <= N <= b,当 b < a 时满足 b <= N <= a

其他函数

random.seed(n: int | None = None, /) None

用种子 n 初始化随机数生成器模块,n 应为整数。当未传入参数(或传入 None)时,PRNG 会从 os.urandom() 所使用的同一个端口专用源重新设定种子。

random.choice(sequence: Any) Any

sequence(元组、列表或任何支持下标操作的对象)中随机选择并返回一项。