随机生成 0 到 1 之间的浮点数

random.random() 方法会返回 [0.0, 1.0) 之间的浮点数,注意,这是一个左闭右开的区间,随机数可能会是 0 但不可能为 1 。

python随机数(转载) 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

随机生成 a 与 b 之间的整数

使用 random.randint(a , b) 方法,你可以生成一个 a 与 b 之间的随机整数,也就是 [a, b] 。

python随机数(转载) 随笔 第2张

 

当然,如果你想要生成的随机整数不会包含 b ,也即 [a, b) , 你可以使用 random.randrange() 方法。

python随机数(转载) 随笔 第3张

 

生成 a 与 b 之间的浮点数

如果你需要生成 [a, b] 之间的随机浮点数,那么 random.uniform(a, b) 会满足你的需求。

python随机数(转载) 随笔 第4张

 

python随机数(转载) 随笔 第5张

从列表中随机取出一个元素

如果你想从序列类型中随机取出一个元素,比如列表、元祖、字符串等,random.choice() 是一个不错的选择。

python随机数(转载) 随笔 第6张

 

 

需要注意的是,该方法需要参数非空,不然会抛出 IndexError 的错误。

python随机数(转载) 随笔 第7张

 

打乱列表中元素的顺序

使用 random.shuffle(items) 方法可以帮你把序列 items 中的元素随机打乱。

 

python随机数(转载) 随笔 第8张

 

如果你不想修改原来的列表,你可以使用 copy 模块先拷贝一份原来的列表

 

python随机数(转载) 随笔 第9张

 

从列表中随机取出 n 个元素

使用 random.sample(items, n) 方法可以从序列 items 中随机取出 n 个元素。

python随机数(转载) 随笔 第10张

 

生成密码学安全的伪随机数

 

什么是密码学安全的伪随机数,请看维基百科( http://dwz.cn/7JhRN5 )。不过暂时不需要深入的话,理解为比普通随机数更随机的技术就好。

如果你需要生成密码学安全的随机数,你可以通过 random.SystemRandom 类实现。random.SystemRandom 实例化后的对象拥有与 random 类似的方法。

python随机数(转载) 随笔 第11张

python随机数(转载) 随笔 第12张

 

如果 Python 版本在 3.6 及以上,可以使用 secrets 模块

通过 secrets 模块,同样也能生成密码学安全的随机数。并且,利用它生成一些特定的秘钥特别方便。

下面是一些简单的例子

 

 python随机数(转载) 随笔 第13张

通过这个模块比较字符串相等,还可以减少被时序攻击的风险。

python随机数(转载) 随笔 第14张

 

python随机数(转载) 随笔 第15张

什么是时序攻击呢,我这找了一个通俗的解释

举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,如果该函数是从第一位开始比较,发现不同就立即返回,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的下降。

(文字来源知乎,侵删)

关于secrets 模块的更多介绍,请看官方文档( https://docs.python.org/3/library/secrets.html )

 

转载自:http://baijiahao.baidu.com/s?id=1596465591200328534&wfr=spider&for=pc

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄