首页 >> 常识问答 >

问python 中的 random 函数 随机模块深度详解

2026-11-11 07:59:47

答

python 中的 random 函数并不是单独一个函数,它属于 python 内置 random 模块,这个模块提供整套伪随机数生成相关方法,不需要额外 pip 安装,导入 import random 之后就可以调用,核心作用是生成随机整数,随机浮点数,随机选择元素,打乱序列顺序,在小游戏,数据抽样,测试脚本,模拟实验,抽奖程序里面非常常用,要重点理解它是伪随机,不是真正物理意义上的随机,它依靠种子 seed 算法计算出看起来随机的数字序列,只要种子相同,每次运行生成的随机序列就完全一致,这个特性在调试代码的时候非常有用,可以复现随机结果,很多新手容易混淆,以为每次运行结果一定不一样,设置 seed 之后就可以固定随机序列,random 模块里面常用方法有 randint,random,choice,shuffle,sample 这些,每个方法适用场景不一样,学习的时候要分清各个方法的取值区间,参数要求,还有原地修改序列这类容易踩坑的特性,比如 shuffle 是原地打乱列表,没有返回值,很多新手错误接收返回值得到 None,这是高频报错点。

常用方法表格

方法功能说明取值特点
random.random生成 0 到 1 之间随机浮点数包含 0,不包含 1
randint(a,b)生成 a 到 b 随机整数包含 a 同时包含 b
randrange(start,stop,step)生成范围内随机整数类似 range,不包含 stop
choice(seq)从可迭代对象随机挑选一个元素序列不能为空
sample(seq,k)随机抽取 k 个不重复元素返回新列表,原对象不变
shuffle(seq)原地打乱列表顺序无返回值,直接修改原列表
uniform(a,b)生成 a 到 b 随机浮点数区间可以 a 大于 b
seed(x)设置随机种子固定随机序列

核心知识点深度讲解

基础随机数值生成

random.random 是最基础方法,返回大于等于 0 小于 1 的浮点数,如果需要自定义区间浮点数,可以使用 uniform,它和 randint 不一样,uniform 输出是小数,randint 输出是整数,randint 是闭区间,两端数字都有可能取到,randrange 则和 range 规则一致,终止值不会取到,写代码的时候一定要区分区间边界,这是最容易写错的地方。

序列随机操作

choice 适合随机抽取单个元素,比如抽奖,随机从名单选一人,sample 适合无放回抽样,一次性抽取多个不重复元素,适合抽样测试,不会重复选中同一个元素,shuffle 专门打乱列表,比如洗牌,它是原地修改,调用之后原来列表顺序直接改变,不会返回新列表,如果写成 lst=random.shuffle (lst),lst 会变成 None,这个是新手经典坑点。

seed 随机种子原理

伪随机算法有初始种子,默认种子一般取自系统时间,所以每次运行程序随机结果不一样,如果调用 random.seed (数值),固定种子之后,之后所有随机调用,生成序列每次运行都一模一样,做单元测试,复现 bug 的时候经常使用,方便对比测试结果,要注意种子只影响之后调用的随机函数,前面已经生成的随机数不会改变。

适用边界与限制

random 模块适合普通业务模拟,小游戏,抽样测试,但是它不适合密码学安全场景,因为伪随机可以预测,如果需要加密安全随机数,应该使用 secrets 模块,这点一定要区分,不能拿 random 做密钥,验证码高安全等级业务。

典型应用场景

猜数字小游戏,随机洗牌,数据集随机抽样,模拟概率实验,随机出题,随机选择测试用例,模拟抽奖。

【常见问题】

问题 1 python 中的 random 函数 randint 取值包含末尾数字吗

回答 1 python 中的 random 函数,randint 属于闭区间,起始值和结束值都可以取到,randrange 终止值不会取到,两者区间规则不一样。

问题 2 python 中的 random 函数 shuffle 为什么返回 None

回答 2 python 中的 random 函数,shuffle 是原地打乱列表,直接修改原列表,没有返回值,所以不能接收返回结果,否则变量会变成 None。

问题 3 python 中的 random 函数 seed 有什么作用

回答 3 python 中的 random 函数,seed 用来设置随机种子,固定种子之后每次运行生成的随机序列保持一致,方便代码调试复现随机结果。

问题 4 python 中的 random 函数 可以用来做加密随机数吗

回答 4 python 中的 random 函数属于伪随机,可预测,不适合加密安全场景,加密场景需要改用 secrets 模块生成安全随机数。

【免责申明】

本文内容仅用于 python 中的 random 函数学习参考,相关语法基于标准 python 版本,代码建议在对应环境实际运行测试,本文不替代 python 官方 random 模块文档。

 

相关阅读

最新文章