我希望能够在Python中将随机数生成器传递到类中。这个类表示一种研究模拟,在这种模拟中,可以使用random.betavariate(2,2)生成的Beta分布来初始化某一组变量,但我希望将来的用户可以随意插入不同类型的随机数生成函数,例如random.uniform(0,1)。
当我尝试像这样初始化这个..。
class simulation:
def __init__(self,rng):
self._rng = rng
s = simulation(random.betavariate(2,2))...the错误不是传递函数本身,而是传递一个新生成的随机数。
>>> s._rng
0.5013004813544717
>>> s._rng
0.5013004813544717因此,简单的问题是:如何将具有指定参数的最喜欢的随机数生成函数传递到类中,将其存储在变量中,并在需要时调用它?最好不要期望我的类的用户(重新)在random模块中编写函数。
发布于 2014-08-13 20:23:05
这个函数叫做random.betavariate。当您执行random.betavariate(2, 2)时,您使用参数调用它。然后将这个调用的结果(一个数字)传递给simulation。
如果您想传递函数本身,只需传递它:
s = simulation(random.betavariate)如果还想传递参数,则必须单独进行(并设置类,以便它知道在哪里找到这些参数)。
您还可以传递一个将所需参数包装到调用中的即席函数,例如:
s = simulation(lambda: random.betavariate(2, 2))这传递一个零参数函数,当调用该函数时,调用random.betavariate(2, 2)。
发布于 2014-08-13 20:22:54
发布于 2014-08-13 20:48:49
也许是个了结?
>>> class simulation(object):
... def __init__(self, rng):
... self.rng = rng
...
>>> def f(func, *args):
... def ret():
... return func(*args)
... return ret
...
>>> bar = f(random.randint, 0, 9)
>>> s = simulation(bar)
>>> s.rng()
6
>>> s.rng()
3
>>> s.rng()
9
>>> s.rng()
1
>>> 不过,来自partial的functools确实看起来更自然。
https://stackoverflow.com/questions/25295377
复制相似问题