[编程基础] Python随机数生成模块总结
Python随机数生成模块教程演示如何在Python中生成伪随机数。
1 介绍
1.1 随机数字生成器
随机数生成器(RNG)生成一组在外观上不显示任何可区分模式的值。随机数生成器分为两类:硬件随机数生成器和伪随机数生成器。硬件随机数生成器被认为能产生真正的随机数。伪随机数生成器根据软件算法生成值。它们产生的值看起来是随机的。但这些值是确定性的,如果算法已知,可以重新生成。
在计算中,随机生成器用于游戏、模拟或密码学。为了安全起见,必须使用加密安全的伪随机数生成器。为了提高伪随机数生成器的质量,操作系统使用从设备驱动程序、用户输入延迟或来自一个或多个硬件组件的抖动中收集的环境噪声。这是加密安全伪随机数生成器的核心。
1.2 Python random 模块
内置的Python random模块为各种分布实现伪随机数生成器。Python使用Mersenne Twister算法来生成伪随机数。这个模块安全性不高。对于安全相关的任务,推荐使用secrets模块。
1.3随机种子
种子是初始化随机数生成器的值。随机数生成器通过对以前的值执行一些操作来生成值。当算法开始时,种子是生成器操作的初始值。生成器最重要和最困难的部分是提供接近真正随机数的种子。要注意的是同一种子产生相同的伪随机数集。
2 使用
2.1 Python random模块同一随机种子使用
在下面的示例中,我们使用相同的种子。相同的种子值产生相同的伪随机值。
import random
myseed = 16
# 设置随机种子
random.seed(myseed)
# 产生随机数
print(random.random())
print(random.random())
print(random.random())
print('********************************')
random.seed(myseed)
print(random.random())
print(random.random())
print(random.random())
0.36152277491407514
0.480480665601294
0.4169526266056648
********************************
0.36152277491407514
0.480480665601294
0.4169526266056648
2.2 Python random.randint
random.randint函数在值[x,y]之间生成整数。以下示例生成数字1到10之间的四个随机整数。
import random
val = random.randint(1, 10)
print(val)
val = random.randint(1, 10)
print(val)
val = random.randint(1, 10)
print(val)
val = random.randint(1, 10)
print(val)
5
6
3
10
2.3 Python random.randrange
random.randrange函数排除了右边的区间。它选择[x,y)之间的值。以下示例生成数字1到10之间的四个随机整数,其中排除了值10。
import random
val = random.randrange(1, 10)
print(val)
val = random.randrange(1, 10)
print(val)
val = random.randrange(1, 10)
print(val)
val = random.randrange(1, 10)
print(val)
5
1
4
5
2.4 Python random.uniform
random.uniform函数在值[x,y]之间生成随机浮点数。以下示例在数字1和10之间产生四个随机浮点数。
import random
val = random.uniform(1, 10)
print(val)
val = random.uniform(1, 10)
print(val)
val = random.uniform(1, 10)
print(val)
val = random.uniform(1, 10)
print(val)
1.1833595562120247
2.3856384178156502
6.45443300907888
6.678603948997886
2.5 Python random.choice
该random.choice函数从非空序列返回一个随机元素。该示例从列表中随机抽取一个单词四次。
import random
words = ['sky', 'storm', 'rock', 'falcon', 'forest']
val = random.choice(words)
print(val)
val = random.choice(words)
print(val)
val = random.choice(words)
print(val)
val = random.choice(words)
print(val)
falcon
falcon
forest
rock
2.6 Python random.shuffle
random.shuffle函数可以将序列打乱。以下示例将单词列表随机打乱两次。
import random
words = ['sky', 'storm', 'rock', 'falcon', 'forest']
random.shuffle(words)
print(words)
random.shuffle(words)
print(words)
['sky', 'falcon', 'forest', 'rock', 'storm']
['storm', 'forest', 'falcon', 'sky', 'rock']
2.7 Python random.sample
random.sample允许从一个序列中随机抽取n个唯一元素。以下示例从单词列表中两次随机抽取三个元素。
import random
words = ['sky', 'storm', 'rock', 'falcon', 'forest']
sample = random.sample(words, 3)
print(sample)
sample = random.sample(words, 3)
print(sample)
['storm', 'rock', 'forest']
['rock', 'falcon', 'storm']
2.8 Python secrets 模块
secrets模块用于生成适合管理密码、帐户身份验证或安全令牌等数据的强随机数。sercets模块中token_hex函数返回一个随机的十六进制文本字符串。token_urlsafe函数返回一个url安全的随机文本字符串。
import secrets
import string
# 返回一个随机的十六进制文本字符串
print(secrets.token_hex(12))
# 返回随机文本字符串
print(secrets.token_urlsafe(12))
# 生成一个八个字符的字母数字密码
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(8))
print(password)
49a4c25d535581c0e1edaf71
_FHy1al7lB4fyVqU
JjLoiy7k
2.9 Python UUID模块
通用唯一标识符(Universally Unique Identifier)UUID是指一台机器上生成的数字,UUID是128位的全局唯一标志,通常由32字节的字符串表示。UUID由以下几部分组成:
时间戳uuid1():根据时间或时钟序列生成字符串
分布式计算uuid2():根据分布式计算环境DCE生成字符串
机器识别号uuid3():根据MAC地址或者IP生成字符串,没有网卡则通过其他方式生成。
随机数uuid4():自动随机生成一组序列字符串
散列值uuid5(): 基于名字和SAHI值
python中uuid模块提供UUID类,UUID类中通过函数uuid1(), uuid3(), uuid4(), uuid5()来生成1, 3, 4, 5各个版本的UUID ( python中没有uuid2()这个函数,但是UUID标识符中有该指示实现,原因uuid2和uuid1类似,所以uuid2极少使用)。
import uuid
name = "test"
print(uuid.uuid1())
print(uuid.uuid3(uuid.NAMESPACE_DNS, name))
print(uuid.uuid4())
print(uuid.uuid5(uuid.NAMESPACE_DNS, name))
62ecaf30-b61a-11ea-ac5b-0a58ac13091e
45a113ac-c7f2-30b0-90a5-a399ab912716
109e9212-e837-4cd9-9e21-3b48aba373fa
4be0643f-1d98-573b-97cd-ca98a65347dd
uuid1可保证生成全球范围的唯一性字符. 但通过该方法生成的字符中包含有主机的网络地址, 可能危及隐私,根据实验的结果,产生的UUID后面几段的数字会完全一样。uuid4使用随机数来生成UUID但是伪随机数有较低的重复概率。uuid3和uuid5类似,都是通过计算命名空间和名字的SHA-1散列值来生成UUID。
在实际使用uuid1和uuid4较多,uuid3和uuid5更适合唯一性更高的场合。
3 参考
[编程基础] Python随机数生成模块总结的更多相关文章
- [编程基础] Python日志记录库logging总结
Python日志记录教程展示了如何使用日志记录模块在Python中进行日志记录. 文章目录 1 介绍 1.1 背景 1.2 Python日志记录模块 1.3 根记录器 2 Python logging ...
- [编程基础] Python模块和包使用笔记
本文探讨Python模块和Python包,这两种机制有助于模块化编程. 模块化编程是指将大型笨拙的编程任务分解为单独的,较小的,更易于管理的子任务或模块的过程.然后可以像构建模块一样将各个模块拼凑在一 ...
- PythonStudy——编程基础 Python Primary
1.什么是编程语言 语言: 一个事物与另外一个事物沟通的介质 .编程语言是程序员与计算机沟通的介质. 编程: 将人类内识别的语言转化为机器能识别的指令,这种过程就叫做编程. 注:最终这些指令会被转化 ...
- python基础===Python 迭代器模块 itertools 简介
本文转自:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...
- 【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)
一.爬虫基础 1.爬虫概念 网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本.用爬虫最大的好出是批量且自动化得获取和处理信息.对于宏观或微观的情况都可以多一个侧面去了 ...
- [编程基础] Python命令行解析库argparse学习笔记
Python argparse教程展示了如何使用argparse模块解析Python中的命令行参数. 文章目录 1 使用说明 1.1 Python argparse可选参数 1.2 Python ar ...
- [编程基础] Python对象的浅拷贝与深拷贝笔记
Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...
- [编程基础] Python中的绝对导入与相对导入
如果您从事的Python项目有多个文件,那么您以前可能不得不使用import语句.即使对于拥有多个项目的Python重度使用者(比如我),import也可能会造成混淆!您可能正在阅读本文,因为您想对P ...
- [编程基础] Python字符串替换笔记
Python字符串替换笔记 Python字符串替换笔记主要展示了如何在Python中替换字符串.Python中有以下几种替换字符串的方法,本文主要介绍前三种. replace方法(常用) transl ...
随机推荐
- NOIP2003 普及组 洛谷P1045 麦森数 (快速幂+高精度)
有两个问题:求位数和求后500位的数. 求位数:最后减去1对答案的位数是不影响的,就是求2p的位数,直接有公式log10(2)*p+1; 求后500位的数:容易想到快速幂和高精度: 1 #includ ...
- ExceptionHandler配合RestControllerAdvice全局处理异常
Java全局处理异常 引言 对于controller中的代码,为了保证其稳定性,我们总会对每一个controller中的代码进行try-catch,但是由于接口太多,try-catch会显得太冗杂,s ...
- 华为路由器RIP路由协议配置命令
RIP路由协议配置 rip 创建开启协议进程 network + ip 对指定网段接口使能RIP功能IP地址是与路由器直连的网段 debugging rip 1 查看RIP定期更新情况 termina ...
- 齐博x1小程序集群一个重要功能升级,可以根据圈子会员组显示不同的菜单。
如下图所示,虽然之前圈子小程序可以自定义会员中心菜单,但是存在一个问题,就是所有会员,比如圈主与普通会员的菜单都将是一样的. 现在升级后,就可以设置不同的圈子会员组,拥有不同的菜单. 比如一个商家,店 ...
- Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...
- Mockito使用方法(Kotlin)
一.为什么要使用Mockito 1.实际案例 1.1 遇到的问题 对于经常维护的项目,经常遇到一个实际问题:需求不停改变,导致架构经常需要修改某些概念的定义. 对于某些十分基础又十分常用的概念,常常牵 ...
- oracle日常命令
---查询锁表(查出后,再执行查询结果进行释放:可多次查询,存在循环锁表的情况)-- select 'alter system kill session '|| ''''|| sess.sid || ...
- Karmada大规模测试报告发布:突破100倍集群规模
摘要:在本文中,我们将介绍用于测试的相关指标,如何进行大规模测试,以及我们如何实现大规模的集群接入. 本文分享自华为云社区<突破100倍集群规模!Karmada大规模测试报告发布>,作者: ...
- PHP使用PHPmailer类和smtp发送邮件
开启邮件smtp服务 设置授权码 引入phpmailer类,smtp类本地下载https://github.com/PHPMailer/PHPMailer //下载PHPMailer并开启php_op ...
- FIT软件开发
1.baidu,google 术和道 2.FIT: future integrated Technology 3.集体检视 > commiter 4.高内聚,低耦合 => 太极 => ...