funktionales Programmieren, Sinn?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

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?
[url=http://www.proandkon.com]proandkon.com[/url]
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

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.
[url=http://www.proandkon.com]proandkon.com[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten