Python 内置模块之 random
random 库是 Python 中生成随机数的标准库,包含的函数清单如下:
- 基本随机函数:
seed
、random
、getstate
、setstate
; - 扩展随机函数:
randint
、getrandbits
、randrange
、choice
、shuffle
、sample
; - 分布随机函数:
uniform
、triangular
、betavariate
、expovariate
、gammavariate
、gauss
、lognormvariate
、normalvariate
、vonmisesvariate
、paretovariate
、weibullvariate
。
发现单词variate
出现频率比较高,该但是是变量的意思。
seed 函数初始化一个随机种子,默认是当前系统时间。
random 函数 生成一个 [0.0,1.0) 之间的随机小数 。
具体代码如下:
import randomrandom.seed(10)x = random.random()
print(x)
其中需要说明的是
random.seed
函数, 通过 seed 函数 可以每次生成相同的随机数,例如下述代码:import randomrandom.seed(10)
x = random.random()
print(x)random.seed(10)
y = random.random()
print(y)
在不同的代码上获取到的值是不同的,但是 x 与 y 是相同的。
0.5714025946899135
0.5714025946899135
12.1.2 getstate() 和 setstate(state)
getstate
函数用来记录随机数生成器的状态,setstate
函数用来将生成器恢复到上次记录的状态。# 记录生成器的状态
state_tuple = random.getstate()
for i in range(4):
print(random.random())
print("*"*10)
# 传入参数后恢复之前状态
random.setstate(state_tuple)
for j in range(4):
print(random.random())
输出的随机数两次一致。
0.10043296140791758
0.6183668665504062
0.6964328590693109
0.6702494141830372
**********
0.10043296140791758
0.6183668665504062
0.6964328590693109
0.6702494141830372
扩展随机函数 random 扩展随机函数有如下几个:
randint`、`getrandbits`、`randrange`、`choice`、`shuffle`、`sample
randint 和 randrange
randint
生成一个 [x,y]
区间之内的整数。 randrange
生成一个 [m,n)
区间之内以 k
为步长的随机整数。测试代码如下:
x = random.randint(1,10)
print(x)y = random.randrange(1,10,2)
print(y)
这两个函数比较简单,
randint
函数原型如下:random.randint(start,stop)
【#抬抬小手学Python# 内置 random 模块【附源码】】参数
start
表示最小值,参数 stop
表示最大值,两头都是闭区间,也就是 start
和 stop
都能被获取到。randrange
函数原型如下:random.randrange(start,stop,step)
如果函数调用时只有一个参数,默认是从 0 到该参数值,该函数与
randint
区别在于,函数是左闭右开,最后一个参数是步长。查阅效果,可以复制下述代码运行:
for i in range(3):
print("*"*20)
print(random.randrange(10))
print(random.randrange(5,10))
print(random.randrange(5,100,5))
getrandbits(k) 和 choice(seq)
getrandbits
生成一个 k 比特长的随机整数,实际输出的是 k 位二进制数转换成的十进制数。 choice
从序列中随机选择一个元素。x =random.getrandbits(5)
print(x)
# 生成的长度是 00000-11111
getrandbits(k)
函数可以简单描述如下:输出一个 $\[0,2^k-1\]$ 范围内一个随机整数,k
表示的是 2 进制的位数。choice
就比较简单了,从列表中返回一个随机元素。import randommy_list = ["a", "b", "c"]print(random.choice(my_list))
shuffle(seq) 和 sample(pop,k)
shuffle
函数用于将序列中的元素随机排序,并且原序列被修改。 sample
函数用于从序列或者集合中随机选择 k 个选择,原序列不变。my_list = [1,2,3,4,5,6,7,8,9]
random.shuffle(my_list)print(my_list)
shuffle
函数只能用于可变序列,不可变序列(如元组)会出现错误。my_list = ["梦想", "橡皮擦", 1, 2, [3, 4]]
print(my_list)
ls = random.sample(my_list, 4)
print(ls)
分布随机函数 该部分涉及的比较多,重点展示重要和常见的一些函数。
uniform(a,b) 、betavariate 和 triangular 函数
uniform
生成一个 [a,b]
之间的随机小数,采用等概率分布。 betavariate
生成一个 [0,1]
之间的随机小数,采用 beta
分布。 triangular
生成一个 [low,high]
之间的随机小数,采用三角分布。在使用
uniform
时候需要注意,如果 a
for i in range(3):
print(random.uniform(4, 1))
其它分布随机函数
以下都是生成随机数的方法,只是底层核心算法不同。
、、、、、、、。
expovariate
:生成一个(0,∞)
之间的随机整数,指数分布;gammavariate
:采用 gamma 分布;gauss
:采用高斯(正太)分布;lognormvariate
:对数正太分布;normalvariate
:正太分布;vonmisesvariate
:冯米赛斯分布;paretovariate
:帕累托分布;weibullvariate
:韦伯分布。
推荐阅读
- [抬抬小手学Python]-Python基础
- 实战|Python轻松实现地图可视化(附详细源码)
- 手写一个 Python "病毒"
- 保姆级教学,手把手教你用Python爬虫(附详细源码)
- 用Python制作一个B站视频下载小工具
- 用Python分析广州房地产市场
- 【抬抬小手学Python】yolov3代码和模型结构图详细注解【图文】
- 【小手一抬学Python】Socket套接字编程Python
- #抬抬小手学Python# Python Poetry 进行依赖管理【图文】
- #小手一抬学Python# Python字典已经掌握了【附源码】