You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不依赖任何库从零实现Python随机函数?

从零实现0到1的伪随机数生成函数

首先得明确:我们平时用的“随机数”大多是伪随机数——通过确定性算法生成的、看起来随机的序列,只要初始种子固定,生成的序列就完全一致。如果要完全不依赖任何库,最容易上手实现的是线性同余生成器(LCG),它的核心公式很简单:

next_seed = (a * current_seed + c) % m

其中a(乘数)、c(增量)、m(模数)是需要精心选择的参数,选得好能让生成的序列周期足够长、分布均匀。这里我们用glibc标准库中使用的经典参数:a=1103515245,c=12345,m=2^31。

下面是具体实现:

# 全局变量保存当前种子,初始值可自定义
_current_seed = 12345

def getRandom():
    global _current_seed
    # 用LCG公式更新种子
    _current_seed = (1103515245 * _current_seed + 12345) % (1 << 31)
    # 将整数转换为0 ≤ n < 1的浮点数
    return _current_seed / (1 << 31)

关键步骤解释

  • 种子维护:用全局变量_current_seed保存当前状态,每次调用函数都会更新这个种子,确保下一次生成的数和之前不同。
  • LCG计算:按照公式生成下一个整数种子,这个整数的范围是0到2^31 - 1。
  • 转换为浮点数:将生成的整数除以2^31,就能把范围映射到0.0 ≤ n < 1.0——因为最大的整数是2^31 -1,除以2^31后结果小于1。

补充说明

如果想要更“随机”的初始种子,你可以手动修改_current_seed的初始值(比如用当前时间的数值,但这需要导入time库,不符合“零依赖”要求)。另外,伪随机数不适合用于加密场景,加密需要专门的密码学安全随机数生成器,但日常测试、模拟场景用这个实现完全足够。

内容的提问来源于stack exchange,提问作者Jordy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:57:15