Seite 1 von 1

funktionales Programmieren, Sinn?

Verfasst: Mittwoch 24. Februar 2010, 11:23
von mzh
Hallo zusammen
Worin liegt der Nutzen,

Code: Alles auswählen

def add_and_print_maker(x):
    def temp(y):
        print("{} + {} = {}".format(x, y, x + y))
    return temp
zu schreiben, anstatt "einfach"

Code: Alles auswählen

def add_simple(x, y):
    print("{} + {} = {}".format(x, y, x + y))
Das Beispiel stammt von Wikipedia. Ich verstehe schon, dass im ersten Fall eine Funktion zurückgeliefert wird, meine Frage ist so gemeint: wann kann es sinnvoll und nützlich sein, eine Funktion zu bekommen, anstatt direkt einen Funktionswert?

Verfasst: Mittwoch 24. Februar 2010, 11:28
von sma
Manchmal will man Funktionen haben, die Funktionen erzeugen. Hier ist ein Beispiel: http://www.python-forum.de/topic-13554.html

Das Wikipedia-Beispiel scheint mir konstruiert. Es zeigt Currying. Mehr nicht.

Stefan

Re: funktionales Programmieren, Sinn?

Verfasst: Mittwoch 24. Februar 2010, 11:35
von Leonidas
mzh hat geschrieben:wann kann es sinnvoll und nützlich sein, eine Funktion zu bekommen, anstatt direkt einen Funktionswert?
Wenn man etwa eine Funktion immer mit einem Parameter aufruft der gleich bleibt. Dann kann man den curry'en und bekommt eine spezialisierte Funktion wo diese Parameter implizit ist. Man kann diese Funktion dann etwa weitergeben, an weitere Funktionen, die den Parameter gar nicht kennen müssen sondern wissen dass sie so eine Funktion erwarten können.

Aber currying ist nicht gleich funktionale Programmierung. Letzteres ist noch ein gutes Stück umfangreicher.

Verfasst: Mittwoch 24. Februar 2010, 12:03
von mzh
ja, ok das scheint sinn zu ergeben. Ich hab kürzlich so ein Button-Tutorial durchgemacht, da war ich aber noch nicht sicher, ob ich den Witz begriffen hab.

Verfasst: Mittwoch 24. Februar 2010, 12:28
von Leonidas
mzh hat geschrieben:ja, ok das scheint sinn zu ergeben. Ich hab kürzlich so ein Button-Tutorial durchgemacht, da war ich aber noch nicht sicher, ob ich den Witz begriffen hab.
Ja, für Callbacks ist das manchmal praktisch, dort wo man früher ``lambda``s verwendet hat, kann man oft currying nutzen.