Python学习【123】:Python随机数三大金刚:从游戏抽卡到密码安全,你用对了吗?
Python学习
一、学前花絮
我们在编写python代码的过程中,有些情况要用到随机数。比如生成一些测试用的数据(之前文章做学生成绩排名的时候就生成关于学生成绩的数据),或者涉及用户随机选择的项目等等。那么随机数到底怎么产生?Python有三个内置的模块专门处理随机数,它们是什么样子?在Python中生成随机数远不止random.randint()那么简单。根据不同的使用场景,Python提供了三种不同“段位”的随机数解决方案:日常模拟与游戏首选random模块,它简单快捷但并非真正随机;安全敏感场景必须使用secrets模块,它采用密码学安全的真随机源;而在数据科学和机器学习领域,numpy.random则以向量化操作实现性能碾压。选错模块不仅影响效率,更可能带来安全隐患——用random生成密码密钥就像用纸糊的锁,看似有用实则一捅就破。理解这三个模块的核心差异,是你写出既高效又安全代码的关键一步。二、Python内置模块生成随机数并示例
Python生成随机数主要有三个模块:random、secrets 和 numpy.random。它们各有不同的应用场景和安全级别。2.1 random 模块:通用随机数
从以上结果,我们可以看到,随机数有各种各样的形态。对于数字型,有0~1之间的浮点数,也有指定区间的浮点数等等。对于序列数据(或称为列表)也可以随机选择或者打乱顺序。还可以设置随机种子及满足某种概率分布去得到随机数。2.2 secrets 模块:密码学安全随机数
Secrets模块的随机数在安全性方面要比random模块强很多了,在实际应用中身份认证、密钥生成等都用到该模块。2.3 numpy.random 模块:高性能批量随机数
2.4实际项目选择哪种随机数
2.5 重要注意事项
因为random的特点,尽管是随机但有可能被预测,所以不要用于生成密码、密钥。2.6 性能对比小测试
从以上数据看出,numpy比random生成随机数要快很多。三、小结
本文针对python内置的三个关于随机数生成的模块进行了探讨,我们在实际项目中,要分析到底是哪种场景选择用哪种随机数。我之前做过一些小程序,比如关于每周吃什么,可以把各种菜系、菜品混在一起,通过random生成随机数,然后选择出一周的菜谱。这种有意思的尝试,是学习python的动力。