关于python:抬抬小手学Python-内置-random-模块附源码

37次阅读

共计 2720 个字符,预计需要花费 7 分钟才能阅读完成。

Python 内置模块之 random

random 库是 Python 中生成随机数的规范库,蕴含的函数清单如下:

  • 根本随机函数:seedrandomgetstatesetstate
  • 扩大随机函数:randintgetrandbitsrandrangechoiceshufflesample
  • 散布随机函数:uniformtriangularbetavariateexpovariategammavariategausslognormvariatenormalvariatevonmisesvariateparetovariateweibullvariate
    发现单词 variate 呈现频率比拟高,该然而是变量的意思。

根本随机函数

seed 与 random 函数

seed 函数初始化一个随机种子,默认是以后零碎工夫。
random 函数 生成一个 [0.0,1.0) 之间的随机小数。

具体代码如下:

import random

random.seed(10)

x = random.random()
print(x)

其中须要阐明的是 random.seed 函数,通过 seed 函数 能够每次生成雷同的随机数,例如下述代码:

import random

random.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)

参数 start 示意最小值,参数 stop 示意最大值,中间都是闭区间,也就是 startstop 都能被获取到。

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 random

my_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<b,那么生成一个 b-a 之间的小数。

for i in range(3):
    print(random.uniform(4, 1))

其它散布随机函数

以下都是生成随机数的办法,只是底层外围算法不同。
、、、、、、、。

  1. expovariate:生成一个 (0,∞) 之间的随机整数,指数分布;
  2. gammavariate:采纳 gamma 散布;
  3. gauss:采纳高斯(正太)散布;
  4. lognormvariate:对数正太散布;
  5. normalvariate:正太散布;
  6. vonmisesvariate:冯米赛斯散布;
  7. paretovariate:帕累托散布;
  8. weibullvariate:韦伯散布。

这篇博客的总结

本篇博客学习了 Python 中随机数相干的知识点,心愿对你有所帮忙。

正文完
 0