首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将随机数生成函数传递给Python类?

如何将随机数生成函数传递给Python类?
EN

Stack Overflow用户
提问于 2014-08-13 20:19:45
回答 3查看 3.2K关注 0票数 4

我希望能够在Python中将随机数生成器传递到类中。这个类表示一种研究模拟,在这种模拟中,可以使用random.betavariate(2,2)生成的Beta分布来初始化某一组变量,但我希望将来的用户可以随意插入不同类型的随机数生成函数,例如random.uniform(0,1)

当我尝试像这样初始化这个..。

代码语言:javascript
复制
class simulation:
  def __init__(self,rng):
    self._rng = rng

s = simulation(random.betavariate(2,2))

...the错误不是传递函数本身,而是传递一个新生成的随机数。

代码语言:javascript
复制
>>> s._rng
0.5013004813544717
>>> s._rng
0.5013004813544717

因此,简单的问题是:如何将具有指定参数的最喜欢的随机数生成函数传递到类中,将其存储在变量中,并在需要时调用它?最好不要期望我的类的用户(重新)在random模块中编写函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-13 20:23:05

这个函数叫做random.betavariate。当您执行random.betavariate(2, 2)时,您使用参数调用它。然后将这个调用的结果(一个数字)传递给simulation

如果您想传递函数本身,只需传递它:

代码语言:javascript
复制
s = simulation(random.betavariate)

如果还想传递参数,则必须单独进行(并设置类,以便它知道在哪里找到这些参数)。

您还可以传递一个将所需参数包装到调用中的即席函数,例如:

代码语言:javascript
复制
s = simulation(lambda: random.betavariate(2, 2))

这传递一个零参数函数,当调用该函数时,调用random.betavariate(2, 2)

票数 5
EN

Stack Overflow用户

发布于 2014-08-13 20:22:54

使用partial from functools绑定参数并获得一个新的类似函数的对象,您可以调用该对象,也可以将其作为参数提供给类。

代码语言:javascript
复制
>>> from functools import partial
>>> import random
>>> r = partial(random.betavariate, 2, 2)
>>> r()
0.7961360011285323
>>> r()
0.15143718490838257
票数 8
EN

Stack Overflow用户

发布于 2014-08-13 20:48:49

也许是个了结?

代码语言:javascript
复制
>>> 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
>>> 

不过,来自partialfunctools确实看起来更自然。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25295377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档