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

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月停服 开放离线与玩家自制
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

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

同类最新

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

更多
中关村论坛年会AI未来论坛聚焦跃迁投资共生
业界动态 · 2026-06-30

中关村论坛年会AI未来论坛聚焦跃迁投资共生

3月30日,中关村国际创新中心成为人工智能领域瞩目的焦点——2026中关村论坛年会人工智能主题日的重要活动“AI未来论坛:跃迁·投资·共生”在此正式拉开帷幕。本次论坛传递出一个清晰的信号:人工智能正从技术突破迈向产业落地的关键阶段,而资本信心的背后,映射出产业演进的明确风向。海淀区明确表态,将以开放

泰国CP AXTRA与菜鸟合作复制中国闪购模式
业界动态 · 2026-06-30

泰国CP AXTRA与菜鸟合作复制中国闪购模式

3月27日,菜鸟集团与泰国正大集团旗下核心零售企业CP AXTRA正式签署战略合作协议。此次合作的核心目标十分明确:菜鸟将充分发挥自身在数字供应链技术、仓储自动化领域的技术优势,以及多年深耕海外仓的运营经验,全力支持CP AXTRA在泰国及东盟国家打造一套线上线下一体化的即时零售物流网络。 CP A

云英谷科技VTDR6135参评SID中国区显示行业奖
业界动态 · 2026-06-30

云英谷科技VTDR6135参评SID中国区显示行业奖

云英谷科技携国内首颗支持1 5KRealRGB显示的AMOLED驱动芯片VTDR6135参评SID中国区显示行业奖。该芯片已量产并用于高端手机,采用28nm制程,支持240Hz刷新率,集成自研APDBI技术与烧屏补偿机制。在ICDT2026大会C06展位展示。

马斯克警告柏林工厂扩张受外部干预需保自主
业界动态 · 2026-06-30

马斯克警告柏林工厂扩张受外部干预需保自主

3月1日消息,特斯拉CEO埃隆·马斯克向柏林工厂的员工传递了一个信号:如果工厂无法在“不受外界干扰”的环境下自主运转,那么后续的扩建计划可能需要延后。这番话源自一段提前录制的视频,由马斯克在得克萨斯州奥斯汀与格伦海德工厂厂长安德烈·蒂里格共同完成录制,随后在柏林超级工厂内部播放给员工观看。 这段视频

高通钱堃博鳌谈构建用户中心智能生态
业界动态 · 2026-06-30

高通钱堃博鳌谈构建用户中心智能生态

高通钱堃指出,AI正重塑人机交互,2026年称为智能体之年。6G被设计为AI原生系统,2026年为标准化关键年,高通已与近60家伙伴达成共识。高通构建以用户为中心的智能生态系统,通过端-边-云协同架构,结合5G 6G技术,并推出AI加速计划,推动个人、物理、工业AI规模化应用。