代码之家  ›  专栏  ›  技术社区  ›  Al Sweigart mayur

CPython为随机模块设置的RNG种子是什么?

  •  1
  • Al Sweigart mayur  · 技术社区  · 2 年前

    您可以通过调用来设置Python的随机数生成器 random.seed(theSeed) 从该种子生成的后续随机数是可预测的。下面的交互式shell示例显示了从整数种子生成的相同随机数 42 在Python 3.10.2上:

    >>> import random
    >>> random.seed(42)
    >>> [random.randint(0, 9) for i in range(20)]
    [1, 0, 4, 3, 3, 2, 1, 8, 1, 9, 6, 0, 0, 1, 3, 3, 8, 9, 0, 8]
    >>> random.seed(42)
    >>> [random.randint(0, 9) for i in range(20)]
    [1, 0, 4, 3, 3, 2, 1, 8, 1, 9, 6, 0, 0, 1, 3, 3, 8, 9, 0, 8]
    

    但你不必打电话 random.seed() 在开始获取随机数之前。CPython(来自Python.org的Python解释器)使用的默认种子是什么?

    1 回复  |  直到 2 年前
        1
  •  3
  •   Al Sweigart mayur    2 年前

    的默认种子 random 模块来自操作系统的加密安全随机数生成器(CSRNG)源(与 os.urandom() )。如果不可用 fallback seed is made from the current system time and the Python interpreter's process ID 这意味着CPython的种子并非微不足道。