导图社区 random模块
学习Python中的random模块的学习笔记.(摘自小甲鱼python教程)
编辑于2020-03-23 13:21:41random模块
模块概述
random模块实现了各种分布的伪随机数生成器
随机数状态的相关函数
random.seed(a=None, version=2)
初始化随机数生成器
a
如果省略该参数或者将其设置为None(默认),将使用当前系统时间作为随机数种子(如果操作系统提供了随机性来源,则用它来代替系统时间)
如果参数a为整数, 则直接被用作随机数种子
该参数的值也可以是字符串、字节、字节数组等
version
如果version=2(默认),字符串、字节、字节数组对象的每一个位都将转换为整数使用
如果version=1, 用于从旧版的python中复制随机序列,字符串和字节算法生成更窄的种子范围
random.getstate()
返回捕获当前生成器内部状态的对象
返回的对象可以传递给下面的setstate()函数, 用于恢复状态
random.setstate(state)
设置生成器的内部状态
传入一个用getstate获得的状态对象,使得生成器恢复到这个状态
小甲鱼:gestate和setstate两个函数搭配使用,可以重现之前获取到的随机值
random.getrandbits(k)
返回一个不大于k的python整数(十进制), 如k = 10, 则返回的结果是在0 ~ 2^10之间的整数
整数相关的随机函数
random.randrange(stop)
random.randrange(start, stop[, step])
从range(start, stop[, step])中随机选择一个元素返回
功能相当于choice(range(start, stop[, step])), 但它不会创建一个range对象
传递的位置参数应该与range()模式匹配
不应该使用关键字参数, 因为函数可能以未定义的方式使用他们
random.randint(a, b)
返回一个随机整数N
a <= N <= b
序列相关的随机函数
random.choice(seq)
从 seq 参数指定的序列中返回一个随机元素。
如果 seq 是空序列,Python 将抛出 IndexError 异常
random.choices(population, weights=None, *, cum_weights=None, k=1
从 population 参数指定的序列中随机抽取 k 个元素并返回
weights 参数是指定相对权重列表,cum_weights 参数是指定累积权重列表(相对权重 [10,5,30,5] 等同于累积权重 [10,15,45,50]),两个参数不能同时存在(注:如果同时存在,Python 将抛出 TypeError 异常)
如果没有指定 weights 相对权重和 cum_weights 累积权重,那么每个元素被选中的概率是相同的。
如果指定任一权重参数,那么其长度必须与 population 参数指定的序列长度一致。
random.shuffle(x[, random])
原地打乱x参数指定的(可变)序列
可选参数是一个 0 参数函数,其返回一个范围在 [0.0, 1.0) 之间的随机浮点数,默认是使用 random() 函数。
如果要打乱一个不可变序列(比如字符串),可以使用 sample(x, k=len(x)) 函数实现,它会生成一个元素打乱后的列表。
random.sample(population, k)
从 population 参数指定的序列或集合中,随机抽取 k 个不重复的元素构成新序列并返回。
该函数返回的是一个新的随机序列,不会破坏原序列,常用于不重复的随机抽样。
如果 k 参数的值大于 population 参数指定的序列或集合的元素个数,Python 抛出 ValueError 异常。
如果要从一个整数区间中随机抽取一定数量的整数,推荐使用 range() 对象作为参数(比如 sample(range(10000000), k=60)),这样实现的效率非常高并且节省内存空间。
实值分布相关的随机函数
random.random()
返回一个值在[0.0, 1.0)之间的随机浮点数
random.uniform(a, b)
返回一个随机浮点数N
如果a<b,则a <= N <= b
如果b>a, 则b <= N <= a
random.triangular(low, high, mode)
返回一个三角分布的随机浮点数 N,其中 low <= N <= high。
众数值通过 mode 参数指定。
low 和 high 参数的默认值是 0 和 1,mode 参数的默认值是边界之间的中心点。
random.betavariate(alpha, beta)
返回一个 Beta 分布的随机浮点数。
参数 alpha 和 beta 都应该大于 0。
返回值的返回在 0 到 1 之间。
random.expovariate(lambd)
random.gammavariate(alpha, beta)
random.gauss(mu, sigma)
random.lognormvariate(mu, sigma)
random.normalvariate(mu, sigma)
random.vonmisesvariate(mu, kappa)
random.paretovariate(alpha)
random.weibullvariate(alpha, beta)
替代生成器
class random.SystemRandom([seed])
使用 os.urandom() 函数的类,利用操作系统提供的源来生成随机数。
该类并不是所有操作系统都适用。
该类不依赖于软件状态,并且序列不可重现。所以,seed() 方法没有效果而被忽略,getstate() 和 setstate() 方法如果被调用则抛出 NotImplementedError 异常。
关于 “再现” 的备注
有时候,能够再现伪随机数生成器给出的序列是有用的。
通过重新使用相同的种子值(只要多个线程没有运行),相同的伪随机数序列就应该可以被生成
随着 Python 版本的迭代,随机模块的算法和种子设定函数有可能会发生改变,但以下两个方面保证不会有变动
如果添加了新的种子生成方法,则将提供向后兼容的方案
当提供的种子一样时,random() 方法将生成一样的伪随机数