一、概述
random库是使用随机数的python标准库,其实计算机并不能产生随机数,所谓的随机数其实是通过一系列复杂的运算所产生的数值,也称为伪随机数,通常是由梅森旋转算法产生,基本过程如下:
这里,如果每次选取的随机数种子相同,那么所产产生的随机数也是相同的,这个可以向我们提供程序的可再现性,当然,随机数的种子也可以不指定,那么,他将会直接使用系统的时间作为随机数的种子,从而产生随机序列。 下面简单说一下random库中所包含的函数。
二、random函数
这里我们我们主要看两个主要函数–>seed()函数
和random()函数
及其他六个扩展函数。
2.1 random.seed()
\
seed
函数主要是利用种子去产生一个随机数序列,指定的种子对应指定的随机数序列,如果不对种子赋值或者不调用seed函数,默认使用当前的时间作为种子去产生一个随机数序列。
2.2 random.random()
random
函数主要是生成随机数,上一个函数生成的是随机数列,random
函数只能生成一个[0,1)
之间的小数,如果之前调用seed
函数,指定种子=10,这里产生的第一个小数一定是0.57,随机小数的产生与种子有关。
简单示例:
>>> import random
>>> random.seed(10)
>>> random.random() ##一次调用产生随机数,以后的随机数都是通过种子10产生的。
0.5714025946899135
>>> random.random()
0.4288890546751146
>>> random.random()
0.5780913011344704
>>> random.random()
0.20609823213950174
注意:
- 这里如果不调用
seed
函数,默认使用调用第一次random
函数时系统的时间作为种子,以后调用random
函数,都是利用第一次的作为种子,而不重新选取了。 - 对于是否使用种子,我们要看实际的需求,如果我们以后想要实现程序的再现,可以给定种子,从而产生相同的随机数序列,如果以后不需要程序的再现性,我们可以不指定种子。
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.seed(10)
>>> random.random()
0.5714025946899135 #两次随机数相同
2.3 random.randint()函数
randint
函数支持我们给定区间,从而产生一个区间 [a,b] 内的整数。
>>> random.randint(1,100)
55
>>> random.randint(1,100)
62
>>> random.randint(1,100)
74
2.4 random.randrange()
- 生成整数的区间为 [m,n) ,同时我们也可以指定步长。
>>> random.randrange(1,100)
2
>>> random.randrange(1,100,10) # 1+3*10
31
2.5 random.getrandbits()
示例:
>>> random.getrandbits(32)
1986768135
>>> random.getrandbits(16)
53301
#这里是无符号数,16bit对应2字节,32bit对应4字节大小。
#数值取值范围:16bit ----> [0,65535], 32bit--->[0,4294967295]
2.6 random.uniform()
- 小数默认取浮点数的精度,小数点后的十六位。
>>> random.uniform(10,100)
35.52563961160436
>>> random.uniform(10,100)
70.74683624214603
2.7 对于序列的操作
对于我们要将几条语句写在一行执行,我们可以中间使用封号隔开。
示例:
>>> random.choice([1,2,3,4,5])
4
>>> random.choice([1,2,3,4,5])
2
>>> s = [1,2,3,4,5]
>>> random.shuffle(s)
>>> print(s)
[4, 2, 1, 5, 3]
>>> random.shuffle(s)
>>> print(s)
[4, 3, 1, 5, 2]
2.8 random.sample()
- random.sample(seq,k)从指定序列中随机获取指定长度的,且不重复出现的片段
>>> l=['a','b','c','d','e']
>>> s=random.sample(l,2)
>>> s
['c', 'a']
>>> l
['a', 'b', 'c', 'd', 'e']