2016-06-25 7 views
1

Ich versuche, eine Funktion zu schreiben, die eine Funktion als ihr Argument nimmt und eine neue Funktion zurückgibt, die die Funktion eine bestimmte Anzahl von Mal ausführt.Python: Rückgabe einer Funktion, die eine bestimmte Funktion n mal

Zum Beispiel, wenn ich eine Funktion hatte:

def doubleNumber(num): 
    return num * 2 

und ich habe folgendes:

doubleThrice = repeatFunction(doubleNumber, 3) 

Ich sollte dann erhalten diese:

doubleThrice(3) # Returns 18 but should it? 

Ich habe dies so weit, aber ich glaube nicht, dass es tut, was ich will:

def repeatFunction(func, n): 
    def inner(inp): 
     return func(inp) * n 
    return inner 

Ich habe den Eindruck, dass es nur einmal die Funktion ausführt und dann das Ergebnis mit n multipliziert, die Funktion nicht n mal ausgeführt, obwohl ich nicht sicher bin.

Ich kann mir einfach nicht vorstellen, wie ich die Funktion, die ich brauche, innerhalb der Funktion repeatFunction aufbauen und zurückgeben kann, noch hat irgendeine der Online-Hilfe wirklich Sinn für mich gemacht.

+0

doubleThrice (3) 18 in Ihrem Beispiel gibt. –

+0

Entschuldigung warum wird das abgelehnt? Ich habe etwas zur Verfügung gestellt, das wie ein vernünftiges Beispiel für eine Frage aussieht, von der sich andere sicherlich schon vorher Sorgen gemacht haben. Es scheint unmöglich, hier eine gute Frage zu stellen. –

+0

@ dot.Py Geht das? Ich bin mir nicht sicher, was meine gegebene Funktion in diesem Fall ist, es ist genau das, was ich bisher habe. Ich war auf der Suche nach einer Anleitung, wie man das macht, was ich beschrieben habe :) –

Antwort

2

Wenn Sie eine Funktion mehrmals anwenden möchten, müssen Sie wahrscheinlich eine Schleife, die wiederholt, dass viele Male:

def repeatFunction(func, n): 
    def inner(inp): 
     for i in range(n): 
      inp = func(inp) 
     return inp 
    return inner 
+1

Ja! Das ist genau das, was ich brauchte, hätte schwören können, dass ich das schon versucht habe ... Es macht durchaus Sinn, die Antwort immer wieder mit wiederholten Funktionsaufrufen zu kombinieren. Sicherlich die einfachste Antwort, wird es als solche markieren, sobald ich kann. Vielen Dank! –

Verwandte Themen