【发布时间】:2016-04-20 05:07:48
【问题描述】:
我有一个通用函数,它定义了我计划使用 scipy.integrate.odeint 集成的 ODE 形式,例如:
def my_ode(K, tau, y, u):
return K*u/tau - y/tau # dydt
我的代码中有几个对象,它们都具有my_ode 中定义的动态形式,但具有唯一参数K 和tau。我希望能够将一个唯一句柄传递给my_ode,并且在我初始化我的对象时已经设置了这些参数,这样当我更新我的对象时,我所要做的就是在一段时间内模拟soln = odeint(my_ode, t, y, u) t.
例如,如果我定义一个类:
class MyThing:
def __init__(self, ode, y0):
# I would rather not maintain K and tau in the objects, I just want the ODE with unique parameters here.
self.ode = ode
self.y = y0
self.time = 0.0
def update(self, t, u):
# I want this to look something like:
self.y = scipy.integrate.odeint(self.ode, t, self.y, u)
当我初始化MyThing 的实例以在初始化时基本上分配参数K 和tau 并且永远不需要再次传递它们时,我可以对 Lambdas 做些什么吗?我有点卡住了。
【问题讨论】:
-
也许你应该看看
functools模块的partial函数,它可能对你有用。 -
我可以只用
thing = MyThing(lambda t, y, u: my_ode(K1, tau1, t, y, u), y0)初始化我的对象,在初始化时为K1和tau1提供值吗?这些价值观会持续存在吗?我还没有到可以在我的代码中测试它的地方。
标签: python function lambda partial-application