以下所有内容来源于random Documentation。
random库实现了不同分布的伪随机数生成器。该模块的几乎所有函数均依赖于基本函数random()函数,该函数在半开区间[0.0, 1.0)等概率地产生一个随机浮点数。Python使用 Mersenne Twister算法作为核心生成器。作为目前使用最广泛的久经考验的伪随机数生成器之一,其具有很多优点,But being completely determistic(不知道怎么得体的翻译),它并不具有普适性,尤其是密码领域完全不适用。
该模块的所有函数均是random.Random类的实例的方法,所以,可以实例化该类来不共享随机种子,这种方式尤其适用于多线程程序。也可以以该类为父类实现自己的类从而使用其他的随机数生成器,只需要覆写random(), seed(), getstate(), setstate(), jumpahead()函数。也可以提供getrandbits函数从而使用randrange()函数。
注意:该模块不能被适用于安全目的,应该使用os.urandom()或者SystemRandom如果需要密码安全伪随机数生成器。
下面为函数的说明:
random.seed(a=None) # 初始化随机数生成器的内部状态;
getstate(), setstate(), jumpahead(), getrandbits(k)
# 整数函数:
randrange(start, stop[, step]) # 返回一个从range(start, stop, step)随机选择的元素, 等价于choice(range(start, stop, step),但不创建range对象;
randint(a, b) # 返回一个位于区间[a, b]的一个随机整数;
choice(seq) # 返回非空序列中的一个随机元素,如果序列为空,抛出IndexError错误。
shuffle(x[, ramdom]) # 就地交换序列x(可以用于洗牌)注意,即使对于较小长度的序列x,其组合情况极多,可能会大于随机数生成器的范围。
sample(population, k) # 返回从population中选择的k无重复元素列表,用于模拟不放回随机采样。(或许可以用来发牌)
# 实数函数:
random() # 返回[0.0, 1.0)内的随机浮点数
uniform(a, b) # 均匀分布 相当于a+(b-a)*random()
triangular(low, high, mode) # 下限, 上限, 众数。
betavariate(alpha, beta) # beta分布
expovariate(lambd) # 指数分布
gammavariate(alpha, beta) # Gamma分布
gauss(mu, sigma) # 高斯分布,比normalvariate()更快
lognormvariate(mu, sigma) # 对数正态分布
normalvariate(mu, sigma) # 正态分布
vonmisesvariate(mu, kappa) #
paretovariate(alpha) # Pareto分布
weibullvariate(alpha, beta) # Weibull分布
示例: