2017-07-19 58 views
1

我有一个python中的单个参数函数的列表,我想要应用相同的缩放/翻译操作。使用python装饰器缩放翻译函数

规模/翻译为一个函数f(x)将如下所示:

F'(X,A,B,C,d)= A + B * F(C *(X - d ))

因此,例如,如果我的原始函数被定义为:

F(X)= 3 * X

我想修改它是:

F'(X ,a,b,c,d)= a + b *(3 *(c *(x-d)))

理想情况下使用装饰器(或其他可重用的操作,我可以应用于列表中的每个函数)。

是否有一种pythonic的方式来实现这样的每个转换不需要硬编码我每个功能?

道歉,如果问题不清楚 - 在此先感谢您的任何建议。

回答

1
def f(x): 
    return 3*x 

def makeFPrime(func): 
    def inner(x, a, b, c, d): 
     return a + b * (3*(c*func(x-d))) 
    return inner 

这给出例如:

f2 = makeFPrime(f) 
f2(2,1,1,1,2) 
1 
f2(2,1,1,1,0) 
19 

或者,使用makeFPrime作为装饰:

def makeFPrime(func): 
    def inner(x, a, b, c, d): 
     return a + b * (3*(c*func(x-d))) 
    return inner 

@makeFPrime 
def f(x): 
    return 3*x 

则F(2,1,1,1,2)返回1