一、概述
这个模块实现的伪随机数生成器。
对于整数,从区间选取。对于序列,随机元素。
在实线的,有功能来计算均匀分布,正态分布(高斯) ,对数正态分布,负指数,γ和β分布。对于生成的角度分布,冯·米塞斯的分布是可用的。
几乎所有的模块功能依赖于基本功能随机的( ) ,它生成一个随机浮点均匀的半开区间[ 0.0 , 1.0 ) 。 Python使用Mersenne扭曲为核心的发电机。它产生53位精度浮点值,周期为2**19937-1 。 C语言底层实现是快速和线程。梅森倍捻机是最广泛的测试,随机数生成器的存在之一。然而,作为完全确定性的,所以不适合用于所有目的,并且是完全不适合加密的目的。
该模块提供的功能实际上是必然的random.Random类的隐藏的实例的方法。你可以实例化你自己随机的情况下获得的发电机不共享状态。这对于多线程程序特别有用,创建随机的为每个线程使用不同的实例,并使用jumpahead ( )方法,使之有可能看到每个线程生成的序列不重叠。
在这种情况下,覆盖随机的有getstate ( )的setstate ()和jumpahead ( )方法:随机类也可以,如果你想使用你自己设计的不同的基本生成子类。或者,一种新型的发电机可以提供一个getrandbits ( )方法 - 这让randrange ( )产生的选择了一个任意大的范围内。
random.getstate()
返回对象捕获发生器的当前内部状态。这个对象可以传递给setstate()来恢复状态
random.setstate(state)
状态应该已经从以前的调用中获得getstate(),以及setstate()恢复发生器的getstate()被调用的时候的内部状态。
random.getrandbits(k)
返回具有k随机位的一个Python整数。这种方法是与梅森旋转算法发生器供给和其他一些发生器也可以提供它作为API的可选部分。如果可用,getrandbits()使randrange()来处理任意大的范围。
random.randrange([start], stop[, step])
random.randrange的函数:从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。
import random
r = random.randrange(10,100,2)
r
30
random.randint(A,B)
返回一个随机整数N使得一个<= N <= B。也可写作randrange(A,B + 1)
r = random.randint(1,10)
r
6
random.choice()
random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。下面是使用choice的一些例子:
random.choice(‘abcdefghij’) # Single random element
‘c’weighted_choices = [(‘Red’, 3), (‘Blue’, 2), (‘Yellow’, 1), (‘Green’, 4)]
population = [val for val, cnt in weighted_choices for i in range(cnt)]
population
[‘Red’, ‘Red’, ‘Red’, ‘Blue’, ‘Blue’, ‘Yellow’, ‘Green’, ‘Green’, ‘Green’, ‘Green’]random.choice(population)
‘Green’
random.shuffle()
random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱。如:
p = [“studying”,”python”,”makes”,”me”,”fun”]
random.shuffle(p)
print p
[‘fun’, ‘python’, ‘studying’, ‘makes’, ‘me’]
random.sample()
random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
li=[1,2,3,4,5,6,7,8,9,10,11,12,13]
s=random.sample(li,2)
s
[2, 8]
li
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
s=random.sample(li,5)
s
[9, 11, 1, 3, 12]
li
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
random.sample(‘abcdefghij’,3)
[‘a’, ‘d’, ‘b’]import random
import string
string.join(random.sample([‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’], 3)).r
eplace(” “,”“)
‘fih’
random.random()
返回范围为[0.0,1.0)的下一个随机浮点数。
random.random()
0.85415370477785668
random.uniform(A,B)
返回一个随机浮点数N使得一个<= N <= b的要<= B和B <= N <=一对B <一个。
random.uniform(1, 10)
5.4221167969800881
洗牌:
items = [1, 2, 3, 4, 5, 6, 7]
random.shuffle(items)
items
[7, 3, 2, 5, 6, 4, 1]random.sample([1, 2, 3, 4, 5], 3) # Three samples without replacement
[4, 1, 5]