Haben Sie jemals darüber nachgedacht, eine kurze Callback-Funktion zu definieren, möchten aber nicht def verwenden, um eine so lange Funktion zu schreiben? Die Antwort ist ja.
Python verwendet Lambda, um anonyme Funktionen zu erstellen, das heißt, es verwendet nicht mehr die Standardform der Def-Anweisung zum Definieren einer Funktion.
Anonyme Funktionen weisen hauptsächlich die folgenden Merkmale auf:
Lambda ist nur ein Ausdruck und der Funktionskörper ist viel einfacher als def.
Der Körper von Lambda ist ein Ausdruck, kein Codeblock. In Lambda-Ausdrücken kann nur eine begrenzte Logik gekapselt werden.
Die Lambda-Funktion verfügt über einen eigenen Namensraum und kann nicht auf Parameter außerhalb ihrer eigenen Parameterliste oder im globalen Namensraum zugreifen.
Grundlegende Syntax
lambda [arg1 [,arg2,.....argn]]:expression
Beispiel:
# -*- coding: UTF-8 -*- sum = lambda num1 , num2 : num1 + num2; print( sum( 1 , 2 ) )
Ausgabeergebnis:
3
Hinweis:Obwohl der Lambda-Ausdruck dies zulässt um einfache Funktionen zu definieren, aber seine Verwendung ist begrenzt. Sie können nur einen einzelnen Ausdruck angeben, dessen Wert der endgültige Rückgabewert ist. Das heißt, es darf keine anderen Sprachfunktionen enthalten, einschließlich mehrerer Anweisungen, bedingter Ausdrücke, Iteration, Ausnahmebehandlung usw.
Bei anonymen Funktionen gibt es ein besonderes Problem, das Aufmerksamkeit erfordert. Ändern Sie beispielsweise das obige Beispiel:
# -*- coding: UTF-8 -*- num2 = 100 sum1 = lambda num1 : num1 + num2 ; num2 = 10000 sum2 = lambda num1 : num1 + num2 ; print( sum1( 1 ) ) print( sum2( 1 ) )
Was ist Ihrer Meinung nach die Ausgabe? Die erste Ausgabe ist 101, die zweite ist 10001, das Ergebnis ist nicht, das Ausgabeergebnis ist wie folgt:
10001 10001
Dies liegt hauptsächlich daran, dass num2 im Lambda-Ausdruck eine freie Variable ist und der Wert an gebunden ist Laufzeit, anstatt beim Definieren zu binden, was sich von der Standardwertparameterdefinition der Funktion unterscheidet. Daher wird empfohlen, in dieser Situation die erste Lösung zu verwenden.
nächsten Abschnitt