【问题标题】:What is the scope of a random seed in Python?Python中随机种子的范围是什么?
【发布时间】:2012-09-04 08:11:27
【问题描述】:

如果我在模块的一个类中使用 Python 函数 random.seed(my_seed),这个种子是否会保留给在该模块中实例化的所有其他类?

【问题讨论】:

    标签: python random scope random-seed


    【解决方案1】:

    是的,种子是为模块中的(隐藏的)全局Random() 实例设置的。来自documentation

    此模块提供的函数实际上是random.Random 类的隐藏实例的绑定方法。您可以实例化您自己的Random 实例以获取不共享状态的生成器。

    如果您需要将种子分开,请使用单独的 Random() 实例;你可以在实例化它时传入一个新种子:

    >>> from random import Random
    >>> myRandom = Random(anewseed)
    >>> randomvalue = myRandom.randint(0, 10)
    

    该类支持与模块相同的接口。

    【讨论】:

    • 这是否意味着eval( "random.random()" ) 也会尊重这个种子?
    • @Dilawar 是的,eval() 在这里并不特别;它仍然使用相同的命名空间,并从您运行 eval() 的全局变量中查找 random,找到相同的模块。
    • 只是为了澄清:从这个类实例化的对象仍然会为随机变量产生不同的(对于每个对象)值。
    猜你喜欢
    • 2022-01-12
    • 2014-06-01
    • 2012-07-16
    • 2011-09-06
    • 2019-11-12
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多