In Python möchte ich eine Funktion schreiben, die eine make_cylinder_volume(r)
andere Funktion zurückgibt. Diese zurückgegebene Funktion sollte mit einem Parameter aufrufbar sein h
und das Volumen eines Zylinders mit Höhe h
und Radius zurückgeben r
.
Ich weiß, wie man Werte von Funktionen in Python zurückgibt, aber wie kann ich eine andere Funktion zurückgeben ?
python
function
functional-programming
currying
Julian Das
quelle
quelle
Antworten:
Versuchen Sie dies mit Python:
Verwenden Sie es so, zum Beispiel mit
radius=10
undheight=5
:Beachten Sie, dass das Zurückgeben einer Funktion eine einfache Angelegenheit war, eine neue Funktion innerhalb der Funktion zu definieren und am Ende zurückzugeben. Achten Sie dabei darauf, die entsprechenden Parameter für jede Funktion zu übergeben. Zu Ihrer Information, die Technik, eine Funktion von einer anderen Funktion zurückzugeben, ist als Currying bekannt .
quelle
10
Sie übergeben haben, irgendwo gespeichert? Wann wird Müll gesammelt?Mit Lambdas, auch als anonyme Funktionen bezeichnet, können Sie die
volume
Funktion innerhalb vonmake_cylinder_volume_func
in eine einzelne Zeile abstrahieren . In keiner Weise anders als die Antwort von Óscar López ist die Lösung mit Lambda in gewissem Sinne immer noch „funktionaler“.So können Sie die akzeptierte Antwort mit einem Lambda-Ausdruck schreiben:
Und rufen Sie dann wie jede andere Curry-Funktion auf:
quelle
lambda h:
würde die Funktion genauso funktionieren , wenn sie entfernt würde?return
versucht, das Ergebnis vor der Rückgabe auszuwerten, und weil es sich um eine Reihe von Variablen handelt, einen Float-Wert zurückgibt (versuchen Sie, eine Funktion zurückzugeben, und es funktioniert).lambda
sagt, dass der folgende Code nicht ausgewertet werden sollte und dass der Gültigkeitsbereich der Variablen r in den von zurückgegebenen Funktionen erhalten bleibtmake_cylinder..
.Ich möchte nur darauf hinweisen, dass Sie dies mit Pymonade tun können
quelle
from functools import partial add5 = partial(add, 5)
Tut genau das gleicheIch weiß, dass ich zu spät zur Party komme, aber ich denke, Sie finden diese Lösung vielleicht interessant.
Hier finden Sie eine Dokumentation zur Funktionsweise
partial
.quelle