`import random` 是 Python 中导入标准库模块 `random` 的语句,用于生成伪随机数、执行随机选择(如随机抽样、打乱顺序等)
📅 2026/8/2 11:53:08
👁️ 阅读次数
📝 编程学习
import random是 Python 中导入标准库模块random的语句,用于生成伪随机数、执行随机选择(如随机抽样、打乱顺序等)。该模块提供了多种函数,例如:
random.random():返回 [0.0, 1.0) 区间的浮点数random.randint(a, b):返回 [a, b] 区间内的随机整数random.choice(seq):从非空序列中随机选取一个元素random.shuffle(lst):就地打乱列表顺序random.sample(population, k):从总体中无放回地随机抽取 k 个不重复元素
这是一个基础但高频使用的模块,常用于模拟、游戏开发、机器学习数据划分、测试用例生成等场景。
要使用random模块生成指定范围[a, b)(左闭右开)内的随机浮点数,可使用random.uniform(a, b)函数。该函数专门用于生成 [a, b) 区间内的均匀分布浮点数(注意:当a > b时会自动交换参数,仍返回[b, a)范围)。
✅ 示例(生成 [1.5, 5.5) 内的随机浮点数):
importrandom num=random.uniform(1.5,5.5)print(num)# 输出如:3.728419...(≥1.5 且 <5.5)⚠️ 补充说明:
random.random()仅生成[0.0, 1.0)的浮点数,若需自定义范围,可手动缩放:a + (b - a) * random.random()—— 效果等价于uniform(a, b),但推荐直接用uniform更清晰、安全。uniform保证数学上的均匀分布,适用于大多数模拟和采样需求。
random.uniform(a, b)(来自 Python 标准库random模块)与numpy.random.uniform(a, b)(来自 NumPy 的随机数生成器)在行为、性能、设计目标和随机数生成机制上存在关键区别:
✅1. 行为差异
random.uniform(a, b):- 返回单个浮点数(标量)。
- 区间为
[a, b](闭区间)——注意:官方文档明确说明“returns a random floating point number N such thata <= N <= b”(Python 3.12+ 文档已修正为包含端点,历史版本曾表述模糊,但实际实现始终包含b)。 - 使用 Mersenne Twister(MT19937)作为默认 PRNG,但其状态独立于 NumPy。
numpy.random.uniform(low=a, high=b, size=None):- 默认返回单个浮点数(当
size=None),但天然支持批量生成(如size=(1000,)返回数组)。 - 区间为
[low, high)(左闭右开)——即结果满足low <= x < high。 - 使用 NumPy 自己的随机数生成器(旧版
numpy.random基于 MT19937;新版(NumPy ≥1.17)推荐使用numpy.random.Generator,默认使用 PCG64 或 Philox 等更现代、更快、更安全的比特生成器)。
- 默认返回单个浮点数(当
⚠️ 关键行为冲突:端点包含性不同→random.uniform(1.5, 5.5)可能返回5.5,而np.random.uniform(1.5, 5.5)永远不会返回5.5。
✅2. 性能差异
- 单次调用:二者差异微小,
random.uniform略快(无数组开销); - 批量生成(如 10⁵ 个数):
numpy.random.uniform(size=100000)快 10–100×—— 因底层 C/Fortran 实现 + 向量化 + 内存连续分配;random.uniform需循环调用,Python 解释器开销大,严重拖慢。
✅3. 状态与可重现性
- 两者完全独立:设置
random.seed(42)不影响numpy.random,反之亦然; - NumPy 新式
Generator(推荐)支持更精细的状态管理(如rng = np.random.default_rng(42)),而random模块仅全局或实例级seed()。
✅4. 安全性与适用场景
random:适合一般脚本、逻辑控制、非科学计算场景;numpy.random(尤其Generator):专为数值计算设计,支持并行流(SeedSequence)、多种分布、种子派生,是科学计算/ML 的事实标准。
📌最佳实践建议:
- 简单脚本 → 用
random.uniform; - 数值计算、批量采样、科研/ML → 用
np.random.default_rng(seed).uniform(low, high, size)。
编程学习
技术分享
实战经验