random中的小秘密
我们都知道python中有一个很强大的随机数生成库:random
random库中常用的函数有八个,分别是:
- random()
- randint()
- randrange()
- getrandbits()
- uniform()
- choice()
- shuffle()
- seed()
从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件我们没有理解,或者超出了我们的理解范围。计算机不能产生真正的随机数,那么伪随机数也就被称为随机数。
——伪随机数:计算机中通过采用梅森旋转算法生成的(伪)随机序列元素。
明白了吧,其实计算机中产生的随机数并不是真正的随机数,而是一个伪随机序列。下面通过实验来说明这点,帮助大家更好的理解。
首先我们先介绍random中两个常见的函数。
random():生成一个[0.0,1.0)之间的随机小数
seed(a=None):初始化给定的随机数种子,默认为当前系统时间
import random
random.seed(10) #这个函数是没有任何输出的,它的作用是初始化了random
的随机数种子,比如现在参数为10,那么random库中的函数
生成随机数时就会产生种子10对应的伪随机序列
上面我们已经给定了随机数种子,那么现在开始实验。
import random
random.seed(10)
for i in range(10):
print(random.random())
在初始化种子为10以后,我们执行了random.random()函数十次,我们来看一下结果,很显然没有任何规律。
0.5714025946899135
0.4288890546751146
0.5780913011344704
0.20609823213950174
0.81332125135732
0.8235888725334455
0.6534725339011758
0.16022955651881965
0.5206693596399246
0.32777281162209315
但是如果我们再把上边的程序执行一次就会发现一些有趣的事情了。
0.5714025946899135
0.4288890546751146
0.5780913011344704
0.20609823213950174
0.81332125135732
0.8235888725334455
0.6534725339011758
0.16022955651881965
0.5206693596399246
0.32777281162209315
可以看到结果完全一样,也就是说只要seed()初始化种子一定,那么函数random()产出的随机数值顺序也就确定了,或者说产生的随机数从伪随机数列中顺序产生。
至于random库中的其他重要函数,大家有兴趣可以去试一下。