Lambdas sind tatsächlich sehr mächtige Konstrukte, die aus Ideen in der funktionalen Programmierung stammen, und es ist etwas, das in naher Zukunft von Python keineswegs leicht überarbeitet, neu definiert oder entfernt werden kann. Sie helfen Ihnen beim Schreiben von Code, der leistungsfähiger ist, da Sie Funktionen als Parameter übergeben können, also die Idee von Funktionen als erstklassige Bürger.
Lambdas neigen dazu, verwirrend zu werden, aber sobald ein solides Verständnis erreicht ist, können Sie sauberen, eleganten Code wie folgt schreiben:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
Die obige Codezeile gibt eine Liste der Quadrate der Zahlen in der Liste zurück. Natürlich können Sie es auch so machen:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
Es ist offensichtlich, dass der frühere Code kürzer ist, und dies gilt insbesondere dann, wenn Sie die Kartenfunktion (oder eine ähnliche Funktion, die eine Funktion als Parameter verwendet) nur an einer Stelle verwenden möchten. Dies macht den Code auch intuitiver und eleganter.
Wie @David Zaslavsky in seiner Antwort erwähnte, sind Listenverständnisse nicht immer der richtige Weg, insbesondere wenn Ihre Liste Werte von einem obskuren mathematischen Weg erhalten muss.
Aus praktischer Sicht war einer der größten Vorteile von Lambdas für mich in letzter Zeit die grafische Benutzeroberfläche und die ereignisgesteuerte Programmierung. Wenn Sie sich Rückrufe in Tkinter ansehen, werden sie nur als Argumente für das Ereignis verwendet, das sie ausgelöst hat. Z.B
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
Was wäre, wenn Sie einige Argumente vorbringen müssten? Etwas so Einfaches wie das Übergeben von 2 Argumenten zum Speichern der Koordinaten eines Mausklicks. Sie können es einfach so machen:
def main():
# define widgets and other imp stuff
x, y = None, None
widget.bind("<Button-1>", lambda event: do-something-cool(x, y))
def do-something-cool(event, x, y):
x = event.x
y = event.y
#Do other cool stuff
Jetzt können Sie argumentieren, dass dies mithilfe globaler Variablen möglich ist. Möchten Sie sich jedoch wirklich Gedanken über Speicherverwaltung und Datenverlust machen, insbesondere wenn die globale Variable nur an einem bestimmten Ort verwendet wird? Das wäre nur ein schlechter Programmierstil.
Kurz gesagt, Lambdas sind fantastisch und sollten niemals unterschätzt werden. Python-Lambdas sind zwar nicht dasselbe wie LISP-Lambdas (die mächtiger sind), aber Sie können wirklich eine Menge magischer Dinge damit machen.