random模块

random模块实现了这种分布的伪随机数生成器,随机数可以被应用于数学、安全等领域,并且也经常被嵌入算法中,用以提高算法效率,在机器学习算法中对随机数的设定是必要的一步,并且随机数的设定会影响算法的好坏。

random模块提供的函数是基于random.Random类的隐藏实例的绑定方法,几乎所有模块函数都依赖于基本函数random()random()函数在半开放区间[0.0, 1.0)内均匀生成随机浮点数。用Randon类作为子类,重写 random() 、 seed() 、 getstate() 以及 setstate() 方法可以自己设计不同随机生成器。

random针对整数,范围有统一的选择;针对序列,随机元素统一选择、存在用于生成列表的随机排列函数,以及用于随机抽样而无需替换的函数;针对实数轴,有计算均匀、正态(高斯)、对数正态、负指数、伽马和贝塔分布的函数,生成角度分布,可以使用von Mises分布。

Bookkeeping 函数

函数 释义
random.seed(a=None, version=2) 初始化随机数生成器,如果a被省略为或为None,则使用当前系统时间。如果提供随机源,则使用提供的随机源,如果a是int类型,则直接使用。
random.getstate() 捕获随机生成器当前内部状态的对象,可以将该对象传递给setstate()来恢复状态
random.setstate(state) state是调用getstate()获得,并且setstate()将生成器的内部状态恢复到getstate()被调用时候的状态
random.getrandbits(k) 返回带有K位随机的Python整数,此方法随MersenneTwister生成器一起提供其他一些生成器也可以将其作为API的可选部分提供(注:Python 使用 Mersenne Twister 作为核心生成器。 它产生 53 位精度浮点数,周期为 2**19937-1)。

整数随机函数

函数 释义
random.randrange(stop) 返回不高于stop的一个随机数
random.randrange(start, stop, step) 从 range(start, stop, step) 返回一个随机选择的元素,相当于 choice(range(start, stop, step)) ,但实际上并没有构建一个 range 对象,在 3.2 版更改: randrange() 在生成均匀分布的值方面更为复杂
random.randint(a,b) 返回随机满足a<=N<=b的随机整数N。相当于 randrange(a, b+1)
>>> import random
>>> random.randrange(100)
94
>>> random.randrange(0, 100, 3)
81
>>> random.randint(0, 10)
4

序列随机函数

函数 释义
random.choice(seq) 从非空序列 seq 返回一个随机元素。 如果 seq 为空,则引发 IndexError
random.choices(population, weights =None, *, cum_weights=None, k = 1 ) population中选择替换,返回大小为 k 的元素列表。 如果 population 为空,则引发 IndexError。如果指定了weight序列,则根据相对权重进行选择。或者,如果给出 cum_weights 序列,则根据累积权重(可能使用 itertools.accumulate() 计算)进行选择。 例如,相对权重[10, 5, 30, 5]相当于累积权重[10, 15, 45, 50]。 在内部,相对权重在进行选择之前会转换为累积权重,因此提供累积权重可以节省工作量。如果既未指定 weight 也未指定 cum_weights ,则以相等的概率进行选择。 如果提供了权重序列,则它必须与 population 序列的长度相同。weights 或 cum_weights 可以使用任何与 random() 返回的 float 值互操作的数值类型(包括整数,浮点数和分数但不包括十进制小数
random.shuffle(x, random) 将序列x随机打乱位置。可选参数 random 是一个0参数函数,在 [0.0, 1.0) 中返回随机浮点数;默认情况下,这是函数 random() 。要改变一个不可变的序列并返回一个新的打乱列表,请使用sample(x, k=len(x))
random.sample(poplation, k) 返回从总体序列或集合中选择的唯一元素的 k长度列表。 用于无重复的随机抽样。返回包含来自总体的元素的新列表,同时保持原始总体不变。 结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本。 这允许抽奖获奖者(样本)被划分为大奖和第二名获胜者(子切片)。要从一系列整数中选择样本,请使用 range() 对象作为参数。 对于从大量人群中采样,这种方法特别快速且节省空间:sample(range(10000000), k=60)
>>> random.choice(['win', 'lose', 'draw'])
'lose'
>>> deck = 'one two three foure'.split()
>>> random.shuffle(deck)
>>> deck
['three', 'two', 'one', 'foure']
>>> random.sample([23,12,45,23,45,678,34,75], k = 4)
[23, 75, 34, 23]

分布函数

函数 释义
random.random() 返回[0.0, 1.0)范围内的一个随机浮点数
random.uniform(a,b) 返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a
random.triangular(low,high,mode) 返回一个随机浮点数N,使得low <= N <= high 并在这些边界之间使用指定的 mode 。 low 和 high 边界默认为零和一。 mode 参数默认为边界之间的中点,给出对称分布
random.betavariate(alpha,beta) Beta分布,参数alpha、beta都必须>0,返回的范围介于0~1之间
random.expovariate(lambd) 指数分布,lambd是1.0除以所需的平均值,非零。如果lambd为正,则返回0到正无穷;如果lambd为负,则返回负无穷到0。
random.gammavariate(alpha,beta) Gmma分布,参数alpha和beta必须>0。
random.gauss(mu,sigma) 高斯分布,mu是平均值,sigma是标准差
random.lognormvariate(mu,sigma) 对数正态分布,如果采用的是自然对数,则会得到平均值为mu,方差为sigma的正态分布,mu可以是任何职,sigma必须大于零
random.normalvariate(mu, sigma) 正态分布,mu是平均值,sigma是标准差
random.vonmisesvariate(mu, kappa) mu是平均角度,以弧度表示,介于0和2pi之间,kappa是浓度参数,必须大于或等于零,如果kappa等于零,则该分部在0到2\pi的范围内较少到均匀的随机角度。
random.paretovariate(alpha) 帕累托分布,alpha是形状参数
random.weibullvariate(alpha, beta) 威布尔分布,alpha是比例参数,beta是形状参数

Gmma分布的概率函数为:

​ $pdf(x) = \dfrac{x^{(alpha-1)}\times math.exp(\dfrac{-x}{beta})}{math.gamma(alpha)\times beta^ {alpha}}$

>>> import random
>>> random.random()
0.024784298572476104
>>> random.uniform(2.0, 5.0)
3.4259267542329748
>>> random.triangular(0.3, 1.5, 0.9)
1.1348586558465164
>>> random.betavariate(0.3, 0.25)
0.9983372793378633
>>> random.expovariate(3.0)
1.680963868987473
>>> random.gammavariate(0.25, 2.0)
0.0888430548880927
>>> random.gauss(13, 2.64)
14.755902455467584

替代随机生成器

使用os.urandom()函数的类,用从操作系统提供的源生成随机数,但这并非适用于所有的系统,也不依赖于软件的序列状态,生成的序列不可再现,因此导致seed()方法没有效果而被忽略,getstate()和setstate()函数被调用会引发NotImplementedError。因此random模块提供了替代随机生成器:

random.SystemRandom(seed)

随机序列重现问题

有的时候需要重现伪随机数生成器给出的序列,这在一些特殊情况下有着特殊的作用,通过重新使用新种子值,只要没有多个线程同时运行,相同的序列就可以在两次不同运行之间重现。

多数的随机模块算法和种子函数都会在Python版本中发生变化,但不变的方面有两个:

. 如果添加了新的生成方法,则会提供向后兼容的随机生成器

. 当兼容的生成器被赋予相同种子,生成器的random()方法将会产生相同的序列

secrets模块

虽然random模块可以生成随机数,但是并不能对生成随机数的种子、随机机制、生成的随机序列进行加密。而secrets模块就是专门用来为管理像密码、验证码、加密token等需要加密数据而生成具有非常强加密性的随机数字。

加密随机数函数

secrets模块能够提供最强的能够操作系统提供的加密随机性资源。其访问和生成函数如下:

函数 释义
secrets.SystemRandom 生成加密系统随机函数生成器
secrets.choice(sequence) 从非空序列sequence中随机返回一个元素
secrets.randbelow(n) 返回[0,n)范围内的随机数
secrets.randbits(k) 随机返回一个bit长度为k的整数

生成tokens

secrets模块为密码以及网络访问提供了生成token函数

函数 释义
secrets.token_bytes(nbytes=None) 随机返回字节数长度为nbytes值的字节形式的字符串,如果nbytes=None则使用默认的nbytes长度
secrets.token_hex(nbytes=None) 随机返回文本长度为nbytes的文本字符串,如果nbytes=None则使用默认的nbytes长度
secrets.token_urlsafe(nbytes=None) 随机返回URL-safe文本字符串,文本形式经过Base64转换,如果nbytes=None则使用默认的nbytes长度
>>> import secrets
>>> secrets.token_bytes(16)
b'\xe4\xef\x0e`\xf6k\xda\x01\xc2\xd0\x94L\x84B\xe2v'
>>> secrets.token_hex(16)
'1e702fc2ed63e4e08d2b075d62b6e782'
>>> secrets.token_urlsafe(16)
'EsZPaNvSuNKw6XpHr6xCCQ'

token字节长度问题

关于token字节长度问题过去很长一段时间没有得到明确的值,直到2015年,32个字节(256bits)长度确定为是token最能接受的高效的长度。如果想要更改token字节长度,就需要给出token的长度。

字节比较功能

secrets模块中的secrets__compare_digest__(a,b)函数可以用来进行字节或字符的比较,如果a和b是一样的,则返回Ture,如果不同则返回False

secrets 练习

>>> import string
>>> alphabet = string.ascii_letters + string.digits
>>> while True:password = ''.join(secrets.choice(alphabet) for i in range(10))if(any(c.islower() for c in password) and any(c.isupper() for c in password) and sum(c.isdigit() for c in password) >= 3):break

Python运算(四)random模块secrets模块相关推荐

  1. python第四十九天--paramiko模块安装大作战

    准备开始学习:paramiko模块,发现这个模块十分难搞 安装不上 搞了半天,win10 64下 pytyon 3.6 的 paramiko模块 死活安不上,在网上不断的找资料,可是没有用,没有用啊 ...

  2. 一文看懂Python(四)-----os.path模块篇

    一.前言 今天介绍一下Python中一个常用的模块–os.path模块.之后会很频繁地用到这个模块,故在分享一下! 二.常用方法解释 方法名 方法介绍 basename(path) 去掉目录路径,单独 ...

  3. 如何查看python安装了哪些模块_Python模块如何安装 并确认模块已经安装好?

    看自己有没有安装好,最简单的办法在可以再控制台下: C:\Users\sony>python Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC ...

  4. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...

    一.前提介绍: 可以开辟作用域的只有类,函数,和模块            for循环 if,else: 不能开辟自己的作用域 避免程序复用和重复调用,将这些写到一个.py文件中,做成一个模块,进行调 ...

  5. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内 ...

  6. python中常用的模块(cleandar模块,time模块,datetime模块,OS模块,shutil()模块,random模块)

    常用模块-cleandar模块,time模块,datetime模块,OS模块,shutil()模块,random模块 claendar 跟日历相关的模块 语法 import calendar 常用方法 ...

  7. python笔记-6(import导入、time/datetime/random/os/sys模块)

    一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内容待日后有深入理解了再来细说 1.import可以导入的两种不同的内容 1.1 *.py文件结尾的文件 ...

  8. Python攻城师的成长————模块突破(collections、time与datetime、random随机数模块)

    今日学习目标: 学习并应用collections.time与datetime.random随机数模块知识 今日学习内容: collections模块 time与datetime模块 random随机数 ...

  9. python random模块中的指令_10分钟让你掌握python编程中random模块功能使用,非常详细...

    原标题:10分钟让你掌握python编程中random模块功能使用,非常详细 python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可 ...

  10. Python中的random模块

    Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下: random.random() 用于生成一个0到1的随机浮点数.如: import random r ...

最新文章

  1. 兑吧:游戏化玩转用户运营的三驾马车
  2. google us web
  3. mynewt 编译环境搭建
  4. 使用SAP Cloud Platform fullstack WebIDE创建SAP UI5应用并部署
  5. 初探EntityFramework——来自数据库的EF设计器
  6. excel服务器没有响应怎么办,勤哲Excel服务器技术支持|Excel服务器常见问题解答...
  7. Linux系统管理——账号管理与权限及归属管理实例
  8. 嵌入式linux 中文输入法,一种用于嵌入式Linux系统的中文拼音输入法的制作方法...
  9. 安装 Linux 系统,如何选择操作系统和电脑硬件
  10. 错误异常too many open files解决方法
  11. 斯嘉丽约翰逊60张pdf什么时间的?_巩俐入围威尼斯电影节的作品叫什么?巩俐为什么被称为女皇?...
  12. 银行软件测试论文参考文献,软件测试毕业论文参考文献.doc
  13. InnoDB存储引擎介绍-(6) 一. Innodb Antelope 和Barracuda区别
  14. ecli中@Data标签getset不起作用
  15. Python3网络爬虫开发实战(第二版)
  16. C# LeetCode刷题 - Leetcode 306. 累加数 - 题解
  17. QQ坦白说代码信息获取过滤代码讲解
  18. shell学习-基础篇
  19. 迪文DGUS智能屏如何轻松实现3D动画
  20. python全栈指的是什么_什么是python全栈

热门文章

  1. 胡昊—第6次作业—static关键字、对象
  2. java 解析dojo_Dojo入门三种HelloWorld!
  3. Mac OS X使用技巧汇总页面
  4. java实现推荐算法实例_从技术角度分析推荐系统案例
  5. 苹果手机怎么把计算机放到桌面,苹果怎么投影到电脑_怎么把苹果手机投影到电脑屏幕上-win7之家...
  6. 利用 Python 爬取58同城品牌公寓(附带租房指南)
  7. 计算机一级excel试题百度云,excel计算机一级试题.doc
  8. 看理想:3万辆交付意味着什么?
  9. 极狐gitlib的安装和使用
  10. photoshop 安装和使用 蓝湖上传设计图