2017-07-19 7 views
1

Ich habe eine Liste von einzelnen Parameterfunktionen in Python, auf die ich die gleiche Skalierung/Übersetzung Operation anwenden möchte.scale translate Funktion mit Python Decorator

Skala/Übersetzung für eine Funktion f (x) wäre wie folgt:

f '(x, a, b, c, d) = a + b * f (c * (x - d))

so zum Beispiel, wenn meine ursprüngliche Funktion wie folgt definiert ist:

f (x) = 3 * x

ich es ändern möchte sein:

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

Im Idealfall mit einem Dekorator (oder eine andere wiederverwendbare Operation, die ich auf jede Funktion in der Liste anwenden kann).

Gibt es einen pythonischen Weg, um dies zu erreichen, so dass nicht jede Transformation für jede Funktion, die ich habe, fest codiert werden muss?

Entschuldigung, wenn die Frage unklar ist - danke im Voraus für irgendwelche Vorschläge.

Antwort

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 

Dies gibt zum Beispiel:

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

, Alternativ makeFPrime als Dekorateur verwenden:

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 

Dann f (2,1,1,1,2) ergibt 1