游乐游手机版
首页/业界动态/文章详情

Python random模块随机性你真的理解吗

时间:2026-06-17 12:42
Python的random模块基于MersenneTwister算法产生伪随机数,种子相同则输出可预测。常用函数如choice、shuffle、sample和uniform各有用途。需注意全局状态多线程竞争、安全性不足以及容器环境种子重复的陷阱。安全场景应改用secrets或os urandom模块。

很多人写了几年 Python,对 random 的用法还停在 randint(1, 100)。说实话,这个模块里藏的坑,比你想象的大得多。

先说结论

random 产生的不是真随机,是伪随机。如果你拿它做抽奖、生成验证码、或者搞加密相关的东西,大概率已经在生产环境埋雷了。

什么叫伪随机

random 模块底层跑的是 Mersenne Twister 算法。它拿一个种子值,用确定性的数学公式推算出一串“看起来随机”的数字序列。

关键点来了:只要种子一样,输出永远一样。

import random
random.seed(42)
print(random.randint(1, 100))  # 82
random.seed(42)
print(random.randint(1, 100))  # 还是82

这不是 bug,是设计。做调试、做测试、做科学实验的时候,可复现的随机性反而是刚需。但你要拿它当加密工具用,那就是在给自己挖坑。

日常最常用的几个函数

random.choice() 从序列里随机抽一个,比写 randint 再取下标干净多了。一行代码搞定,不用先算索引再去取,可读性直接上一个档次。

random.shuffle() 原地打乱列表。不少人踩过的坑:这玩意儿是原地操作,改变原有列表,不返回新列表。你以为它在返回打乱后的结果,其实返回的是 None。这个坑在行业里反复出现。

random.sample() 做不放回抽样,公司年会抽奖就用它。指定抽几个人,它帮你搞定,不用自己写去重逻辑。

random.uniform(a, b) 生成区间内的浮点数,造测试数据很实用。

三个容易翻车的地方

第一个坑是全局状态。random 模块内部维护了一个全局 Random 实例,整个进程共享。多线程环境下,几个线程同时调 random.randint(),状态竞争的问题就来了。解决办法是用 random.Random() 自己建实例,各用各的,互不干扰。

第二个坑是安全性。Mersenne Twister 是可预测的。攻击者收集足够多的输出值,理论上能反推出种子。Python 专门提供了 secrets 模块来处理这类需求。验证码、密码重置链接、会话 ID,全部上 secrets,别偷懒用 random。

第三个坑是不传 seed 的行为。不传参数的话,random 用系统时间做种子。听起来随机吧?但在容器化环境里,如果一堆进程同时启动,时间戳可能完全一样,种子也就撞了。这种场景下,你以为每个进程都有独立的随机序列,实际上可能大家都在输出同一串数字。

场景对应方案

日常开发和测试数据,random 随便用。需要可复现的科学实验,用 random.seed 固定种子。密码、token、验证码,切换到 secrets 模块。大批量高性能随机数,上 numpy.random。加密级别的随机数,用 os.urandom()。

写在最后

random 模块本身没问题,问题是用错了地方。把伪随机当加密随机用,是不少线上事故的直接原因。搞清楚每个工具的边界在哪,非常重要!

来源:https://www.51cto.com/article/840822.html
上一篇浏览器已解决这八个问题,请停止过度设计 下一篇旅行游记2026年7月停服 开放离线与玩家自制
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
台式机加装固态硬盘怎么选?三星9100 PRO深度解析
业界动态 · 2026-09-01

台式机加装固态硬盘怎么选?三星9100 PRO深度解析

台式机升级存储常受限于系统启动慢、游戏加载卡顿与大文件传输延迟。本文基于三星9100 PRO的PCIe 5 0架构、14800MB s读取、13400MB s写入、2200K 2600K IOPS、1TB~8TB容量、第八代V-NAND与5nm主控、镍涂层散热与DTG技术、散热片版适配及魔术师软件,提供选购判断与安装兼容性要点,帮助读者评估是否值得一步到位升级。

宁德时代2026年中期分红61.8亿元,同比增35%,创历史新高
业界动态 · 2026-09-01

宁德时代2026年中期分红61.8亿元,同比增35%,创历史新高

宁德时代发布2026年中期分红方案,总额达61 8亿元,同比增长35%。本文梳理分红具体安排、历史对比、业绩支撑及分红机制,帮助投资者评估公司现金流实力与股东回报策略。

企业硬盘报废销毁合规指南:如何选择专业机构与处理流程
业界动态 · 2026-08-31

企业硬盘报废销毁合规指南:如何选择专业机构与处理流程

企业硬盘报废面临数据复原与合规风险,需选择具备资质且流程透明的专业机构。本文解析行业乱象,介绍以团体标准为核心的合规销毁流程,涵盖上门收运、消磁粉碎、视频溯源及尾料处置,帮助企业规避泄密责任,确保数据安全闭环。

机密文件销毁找什么机构?认准团标参编与资质合规
业界动态 · 2026-08-31

机密文件销毁找什么机构?认准团标参编与资质合规

机密文件销毁找什么机构?核心在于甄别服务商是否具备正规保密资质及是否参与行业标准制定。本文解析《商业秘密及敏感信息载体销毁通用规范》团标要求,提供筛选销毁机构的实操指南,帮助企业规避数据泄露风险,确保销毁流程合规可溯。

影石Insta360 X6全球首销登顶:8K全景画质与AI创作功能解析
业界动态 · 2026-08-31

影石Insta360 X6全球首销登顶:8K全景画质与AI创作功能解析

影石Insta360 X6全球同步发售即登顶国内外主流平台销量榜首。本文解析其搭载的索尼定制方形大底传感器、4nm AI三芯架构及8K50fps画质,详解3D时光舱、AI导演等独家功能,探讨全景相机从专业工具向大众智能创作设备的演进趋势。