9.6. random
- 生成伪随机数
源代码: Lib / random.py
该模块为各种分布实现伪随机数生成器。
对于整数,从范围中有统一的选择。对于序列,存在随机元素的统一选择,用于生成列表的随机排列的函数,以及用于随机抽样而无需替换的函数。
在实线上,有计算均匀,正态(高斯),对数正态,负指数,伽马和贝塔分布的函数。为了生成角度分布,可以使用von Mises分布。
几乎所有模块函数都依赖于基本函数random()
,它在半开放范围[0.0,1.0]内均匀生成随机浮点数。Python使用Mersenne Twister作为核心生成器。它产生53位精度浮点数,周期为2 ** 19937-1。C中的底层实现既快又线程安全。Mersenne Twister是现存最广泛测试的随机数发生器之一。但是,完全确定性,它不适用于所有目的,并且完全不适合加密目的。
此模块提供的函数实际上是random.Random
类的隐藏实例的绑定方法。您可以实例化自己的实例Random
以获取不共享状态的生成器。
类Random
也可以,如果你想用你自己设计的不同的基本发电机子类:在这种情况下,覆盖random()
, seed()
,getstate()
,和setstate()
方法。可选地,新生成器可以提供getrandbits()
方法 - 这允许randrange()
在任意大范围内产生选择。
该random
模块还提供了SystemRandom
使用系统函数os.urandom()
从操作系统提供的源生成随机数的类。
警告
此模块的伪随机生成器不应用于安全目的。有关安全性或加密用途,请参阅该secrets
模块。
也可以看看
M. Matsumoto和T. Nishimura,“Mersenne Twister:623维等分的均匀伪随机数发生器”,ACM Transactions on Modeling and Computer Simulation Vol。1998年1月8日第1期。
具有长周期和相对简单的更新操作的兼容替代随机数发生器的互补 - 乘法携带配方。
9.6.1.簿记功能
random.
seed
(a =无,版本= 2 )
初始化随机数生成器。
如果一个被省略或None
,当前系统时间被使用。如果操作系统提供随机源,则使用它们而不是系统时间(os.urandom()
有关可用性的详细信息,请参阅函数)。
如果a是int,则直接使用。
对于版本2(默认值),a str
,bytes
或bytearray
对象将转换为a int
并使用其所有位。
与版本1(提供用于从旧版本的Python再现随机序列)时,算法str
和bytes
产生更窄的范围种子。
版本3.2中已更改:已移至版本2方案,该方案使用字符串种子中的所有位。
random.
getstate
()
返回捕获生成器当前内部状态的对象。可以传递此对象setstate()
以恢复状态。
random.
setstate
(状态)
状态应该已经从以前的调用获得getstate()
,并且 setstate()
恢复发生器的内部状态,这是什么的时候getstate()
被调用。
random.
getrandbits
(k )
返回一个带有k个随机位的Python整数。此方法随MersenneTwister生成器一起提供,其他一些生成器也可以将其作为API的可选部分提供。可用时,getrandbits()
可以randrange()
处理任意大范围。