我创建了一个函数,它返回一个变量指定的值。喜欢
y = 1.
def f(x):
return y
我需要这个函数作为函数对象来创建另一个对象
dist = dist.distribution(f, other_variables)
这很好用。但是,如果我想创建几个不同的分布对象(在 y 变化的意义上具有不同的函数 f)喜欢
dist = dist.distribution(f, other_variables)
y = 2.
dist2 = dist.distribution(f, other_variables)
那么所有的分布对象只返回最后一个指定的值 y。IE
dist.f()(1.)
>>>> 2.
dist2.f()(1.)
>>>> 2.
而不是预期的
dist.f()(1.)
>>>> 12.
dist2.f()(1.)
>>>> 2.
问题显然是,函数 f 仅在被调用时才访问变量,而不是最初一次。
有办法解决吗?最后我想要的是:一个只有一个变量的函数(x,虽然在这种情况下它没有做任何事情,但在其他情况下需要它),它返回创建分布时的 y 值。所以原则上我希望在初始化分布时,给定的函数是深度复制的,从某种意义上说,它不再受任何变量变化的影响。这可能吗?