gpt4 book ai didi

python - 随机种子如何在 Python 的函数工厂中工作?

转载 作者:行者123 更新时间:2023-11-30 22:40:45 25 4
gpt4 key购买 nike

假设我想在给定成功概率的情况下生成一堆二进制数生成器。我担心的一个问题是随机种子。 f1、f2、f3 的随机种子是它们的创建时间,对吧?而且无论全局命名空间中的随机种子如何,每个函数的种子都是固定的,对吗?

def f(p):
import random, time
random.seed(time.time())
def g():
return 1 if random.random() < p else 0
return g

f1 = f(0.05)
f2 = f(0.65)
f3 = f(0.25)

最佳答案

每次调用 f() 时,您都会将种子传递给全局随机对象,因为 random 中的所有顶级函数> 模块输入到单例对象中。这意味着在创建 f3 时,f2f1 中设置的种子已被取代,这些种子不是 独立于全局随机对象。为每个 f() 调用再次导入 random 不会给你一个新的状态,因为实际上每次加载模块对象本身时都会重新绑定(bind)名称(仅在第一次导入)。

如果您希望每个函数都有一个种子随机生成器,则需要创建单独的 random.Random() 实例:

import random
import time

def f(p):
seeded_random = random.Random(time.time())
def g():
return 1 if seeded_random.random() < p else 0
return g

来自random module documentation :

The functions supplied by this module are actually bound methods of a hidden instance of the random.Random class. You can instantiate your own instances of Random to get generators that don’t share state.

关于python - 随机种子如何在 Python 的函数工厂中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42799514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com