【发布时间】:2017-04-06 03:37:58
【问题描述】:
这是我的问题:
给定任意两个函数,例如。 f(x,a) 和 g(x,b),我想构建一个新函数,比如 F(f,g),它返回 f 和 g 的乘积。所以:
F(f,g) = f*g = f(x, a) * g(x, b) = F(x, a, b)
我希望尽可能少地进行这种硬编码。所以,对于 h(x, c, d),我会得到 F(f,h) = F(x, a, c, d)。 鉴于那时我想最小化 F,我想建立一个类。这是一个 MWE:
import numpy as np
from inspect import getargspec
def f(x, a):
return np.tanh(x*a)
def g(x, b):
return np.power(x,b)
def h(x, c, d):
return x*c+np.log(x)
class fit_func(object):
def __init__(self, data, *args):
self.data = data
self.func_a = args[0]
self.func_b = args[1]
self.args_a = getargspec(args[0])[0][1:]
self.args_b = getargspec(args[1])[0][1:]
此时,我想到了包含以下__call__方法:
def __call__(self, *self.args_a, *self.args_b):
return self.func_a(self.data,self.args_a)*self.func_b(data,self.args_b)
我想:这样一个类的实例,比如F = fit_func(some_data_array,f,g),可以调用为F(a,b)。但是,python 不喜欢__call__ 的参数中的self.args_a 和self.args_b,我明白为什么。
有人知道获得这个的聪明方法吗?提前非常感谢您
【问题讨论】:
-
我相信你的意思是 f(x, a) * g(x, b) = F(x, a, b)
-
绝对 Mike 和我还更正了一件事:
__call__方法的参数中self.args_a和b前面的解包 *