代码之家  ›  专栏  ›  技术社区  ›  Plazgoth

有没有办法读回python中的随机种子?

  •  4
  • Plazgoth  · 技术社区  · 12 年前

    我知道如何在python中设置随机种子

    random.seed([x])

    一旦设置了种子,是否有任何方法可以读回并找出传递给seed()函数的值?

    2 回复  |  直到 12 年前
        1
  •  4
  •   mattypiper    12 年前

    虽然Python的Random(Mersenne Twister)的底层算法是确定性的,但种子不会存储在实现的内存空间中的任何地方。如有必要,由调用方存储种子。

    http://docs.python.org/library/random.html#module-random

    有关Python实现的更多信息(或者用自己的种子存储随机类覆盖它),请参阅:

    http://hg.python.org/cpython/file/0b650272f58f/Lib/random.py

    http://hg.python.org/cpython/file/0b650272f58f/Python/random.c

        2
  •  3
  •   nagylzs    12 年前

    没有办法取回种子本身。种子用于更新随机数生成器的内部状态,并且不直接存储在任何地方。

    然而,有一种方法可以保存当前状态!随机模块基于Mersenne-Tister伪随机数生成器,并用C语言实现(带有_random扩展模块)。您可以这样做:

    import random
    r = random.Random()
    # Use the r object to generate numbers
    # ...
    curstate = r.__getstate__()
    # Use it even more..
    #
    r.__setstate__(curstate) # Go back to previous state
    

    换句话说,random.random()对象可以被pickle,并且您可以使用pickle对象(或者 __getstate__ / __setstate__ 方法)返回到先前的状态。