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

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

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

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

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

生成 a 与 b 之间的浮点数

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

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

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

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

打乱列表中元素的顺序

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

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

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

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

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

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

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

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

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

下面是一些简单的例子

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

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

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

(文字来源知乎,侵删)

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

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

最新文章

  1. Swift-UIButton
  2. Java开发常用的在线工具
  3. PHPWord
  4. 载入条LoadingBar
  5. mysql 修改表结构
  6. Check list
  7. Eclipse开发,利用WordWrap设置自动换行
  8. bjfu1262 优先队列
  9. C# StringExt 字符串扩展
  10. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
  11. Navicat for MySQL11--使用经验
  12. Linux多线程编程——线程的同步
  13. PHP执行Session与前端JS之间的关系
  14. Android SDK工具(谷歌提供的16个工具)简介
  15. P4126 [AHOI2009]最小割
  16. echart 判断数据是否为空
  17. 160A
  18. BTREE这种Mysql默认的索引方式,具有普遍的适用性
  19. Nginx升级
  20. 20155201 网络攻防技术 实验八 Web基础

热门文章

  1. <router-link :to="...">
  2. 往github上上传项目
  3. Day9 - 异步IO\数据库\队列\缓存
  4. java——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  5. java内存模型和垃圾回收
  6. boost 条件变量
  7. 从零开始:Mysql基于Amoeba的集群搭建
  8. keep, preserve, noprune
  9. C++ 贪吃蛇一维
  10. python相关软件安装流程图解——linux 安装python3——Python-3.7.1