Python Lambda-Funktionen mit BEISPIELEN

โšก Intelligente Zusammenfassung

Lambda-Funktionen in Python Lambda-Funktionen sind kleine anonyme Funktionen, die mit dem Schlรผsselwort lambda anstelle von def definiert werden. Sie enthalten einen einzelnen Ausdruck, kรถnnen beliebig viele Argumente annehmen und werden oft direkt an eingebaute Funktionen wie map(), filter() und sorted() รผbergeben.

  • ๐Ÿ”‘ Lambda-Schlรผsselwort: Ein Lambda-Ausdruck wird als Lambda-Argumente geschrieben: Ausdruck, ohne def, ohne Namen und ohne explizite Rรผckgabeanweisung.
  • ๐Ÿงฎ Einzelausdruck: Der Funktionskรถrper enthรคlt genau einen Ausdruck, dessen Wert automatisch zurรผckgegeben wird; daher sind Anweisungen und mehrzeilige Zeilen nicht zulรคssig.
  • ๐Ÿ”— Integrierte Kopplung: Lambdas werden hรคufig an map(), filter(), reduce() und sorted() รผbergeben, um Elemente in einer Sequenz zu transformieren oder auszuwรคhlen.
  • โšก IIFE: Ein Lambda-Ausdruck kann mithilfe des Musters (lambda x: x + x)(2) definiert und sofort aufgerufen werden und gibt sofort ein Ergebnis zurรผck.
  • ๏ธ Versus def: Regulรคre Funktionen benรถtigen einen Namen und kรถnnen viele Anweisungen enthalten, wรคhrend Lambdas diese Flexibilitรคt gegen eine kompakte, einzeilige Syntax eintauschen.
  • ๐Ÿค– KI-Unterstรผtzung: KI-Assistenten wie GitHub Copilot generieren Lambda-Ausdrรผcke fรผr Map-, Filter- und Sortierschlรผssel anhand einer kurzen Eingabeaufforderung.

Python Lambda-Funktionen

Was ist die Lambda-Funktion in Python?

A Lambda-Funktion in Python Beim Programmieren handelt es sich um eine anonyme Funktion oder eine Funktion ohne Namen. Es handelt sich um eine kleine und eingeschrรคnkte Funktion mit nicht mehr als einer Zeile. Genau wie eine normale Funktion kann eine Lambda-Funktion mehrere Argumente mit einem Ausdruck haben.

In Pythonwerden Lambda-Ausdrรผcke (oder Lambda-Formen) verwendet, um anonyme Funktionen zu konstruieren. Dazu verwenden Sie die Lambda Schlรผsselwort (genau wie Sie verwenden def um normale Funktionen zu definieren). Jede anonyme Funktion, die Sie in Python besteht aus drei wesentlichen Teilen:

  • Das Lambda-Schlรผsselwort.
  • Die Parameter (oder gebundenen Variablen) und
  • Der Funktionskรถrper.

Eine Lambda-Funktion kann eine beliebige Anzahl von Parametern haben, der Funktionskรถrper kann jedoch nur Parameter enthalten dank One Ausdruck. Darรผber hinaus wird ein Lambda in einer einzigen Codezeile geschrieben und kann auch sofort aufgerufen werden. All dies werden Sie in den kommenden Beispielen in Aktion sehen.

Syntax und Beispiele

Die formale Syntax zum Schreiben einer Lambda-Funktion ist wie folgt:

lambda p1, p2: expression

Hier sind p1 und p2 die Parameter, die an die Lambda-Funktion รผbergeben werden. Sie kรถnnen so viele oder wenige Parameter hinzufรผgen, wie Sie benรถtigen.

Beachten Sie jedoch, dass wir die Parameter nicht wie bei regulรคren Funktionen in Klammern setzen. Der letzte Teil (Ausdruck) kann beliebig sein. Python Ausdruck, der auf die Parameter angewendet wird, die Sie der Funktion รผbergeben.

Beispiel 1

Nachdem Sie nun รผber Lambdas Bescheid wissen, versuchen wir es anhand eines Beispiels. Also, รถffnen Sie Ihr IDLE und geben Sie Folgendes ein:

adder = lambda x, y: x + y
print (adder (1, 2))

Code Erlรคuterung

Hier definieren wir eine Variable, die das von der Lambda-Funktion zurรผckgegebene Ergebnis enthรคlt.

1. Das Lambda-Schlรผsselwort, das zum Definieren einer anonymen Funktion verwendet wird.

2. x und y sind die Parameter, die wir an die Lambda-Funktion รผbergeben.

3. Dies ist der Hauptteil der Funktion, der die beiden von uns รผbergebenen Parameter hinzufรผgt. Beachten Sie, dass es sich um einen einzelnen Ausdruck handelt. Sie kรถnnen nicht mehrere Anweisungen in den Hauptteil einer Lambda-Funktion schreiben.

4. Wir rufen die Funktion auf und geben den zurรผckgegebenen Wert aus.

Beispiel 2

Das war ein einfaches Beispiel, um die Grundlagen und die Syntax von Lambda-Ausdrรผcken zu verstehen. Versuchen wir nun, einen Lambda-Ausdruck auszugeben und das Ergebnis zu betrachten. ร–ffnen Sie dazu erneut Ihre Datei. IDLE und geben Sie Folgendes ein:

#What a lambda returns
string='some kind of a useless lambda'
print(lambda string : print(string))

Speichern Sie nun Ihre Datei und drรผcken Sie F5, um das Programm auszufรผhren. Dies ist die Ausgabe, die Sie erhalten sollten.

Ausgang:

<function <lambda> at 0x00000185C3BF81E0>

Was geschieht hier? Schauen wir uns den Code an, um das besser zu verstehen.

Code Erlรคuterung:

1. Hier definieren wir ein Schnur das Sie als Parameter an die Lambda-Funktion รผbergeben werden.

2. Wir deklarieren eine Lambda-Funktion, die eine print-Anweisung aufruft und das Ergebnis ausgibt.

Warum gibt das Programm die รผbergebene Zeichenkette nicht aus? Das liegt daran, dass die Lambda-Funktion selbst ein Funktionsobjekt zurรผckgibt. In diesem Beispiel wird die Lambda-Funktion nicht ausgefรผhrt. namens durch die Druckfunktion, sondern einfach Rรผckkehr Das Funktionsobjekt und der Speicherort, an dem es gespeichert ist. Das wird in der Konsole ausgegeben.

Beispiel 3

Wenn Sie jedoch ein Programm wie dieses schreiben:

#What a lambda returns #2
x="some kind of a useless lambda"
(lambda x : print(x))(x)

Und wenn Sie es durch Drรผcken von F5 ausfรผhren, sehen Sie eine Ausgabe wie diese.

Ausgang:

some kind of a useless lambda

Die Lambda-Funktion wird nun aufgerufen, und die รผbergebene Zeichenkette wird in der Konsole ausgegeben. Doch was hat es mit dieser ungewรถhnlichen Syntax auf sich, und warum steht die Lambda-Definition in Klammern? Das wollen wir uns jetzt ansehen.

Code Erlรคuterung:

1. Hier ist die gleiche Zeichenkette, die wir im vorherigen Beispiel definiert haben.

2. In diesem Abschnitt definieren wir eine Lambda-Funktion und rufen sie sofort auf, indem wir die Zeichenkette als Argument รผbergeben. Dies nennt man IIFE (Immediately Invoked Function Expression), und Sie werden in den folgenden Abschnitten dieses Tutorials mehr darรผber erfahren.

Beispiel 4

Betrachten wir ein letztes Beispiel, um zu verstehen, wie Lambdas und regulรคre Funktionen ausgefรผhrt werden. ร–ffnen Sie also Ihre IDLE und geben Sie in einer neuen Datei Folgendes ein:

#A REGULAR FUNCTION
def guru( funct, *args ):
funct( *args )
def printer_one( arg ):
return print (arg)
def printer_two( arg ):
print(arg)
#CALL A REGULAR FUNCTION 
guru( printer_one, 'printer 1 REGULAR CALL' )
guru( printer_two, 'printer 2 REGULAR CALL \n' )
#CALL A REGULAR FUNCTION THRU A LAMBDA
guru(lambda: printer_one('printer 1 LAMBDA CALL'))
guru(lambda: printer_two('printer 2 LAMBDA CALL'))

Speichern Sie nun die Datei und drรผcken Sie F5, um das Programm auszufรผhren. Wenn Sie keine Fehler gemacht haben, sollte die Ausgabe in etwa so aussehen.

Ausgang:

printer 1 REGULAR CALL

printer 2 REGULAR CALL

printer 1 LAMBDA CALL

printer 2 LAMBDA CALL

Code Erlรคuterung:

1. Eine Funktion namens guru, die eine andere Funktion als ersten Parameter und alle weiteren Argumente als nachfolgenden Parameter entgegennimmt.

2. printer_one ist eine einfache Funktion, die den ihr รผbergebenen Parameter ausgibt und zurรผckgibt.

3. printer_two ist รคhnlich wie printer_one, jedoch ohne die return-Anweisung.

4. In diesem Teil rufen wir die Guru-Funktion auf und รผbergeben die Druckerfunktionen und eine Zeichenkette als Parameter.

5. Dies ist die Syntax, um den vierten Schritt (d. h. den Aufruf der Guru-Funktion) mithilfe von Lambdas zu erreichen.

Im nรคchsten Abschnitt erfahren Sie, wie Sie Lambda-Funktionen verwenden map (), reduzieren() und Filter() in Python.

Die Verwendung von Lambdas mit Python eingebaute

Lambda-Funktionen bieten eine elegante und leistungsstarke Mรถglichkeit, Operationen mit integrierten Methoden in Python. Dies ist mรถglich, weil Lambdas sofort aufgerufen und als Argument an diese Funktionen รผbergeben werden kรถnnen.

IIFE in Python Lambda

IIFE steht fรผr sofort aufgerufene Funktionsausfรผhrung. Das bedeutet, dass eine Lambda-Funktion sofort nach ihrer Definition aufgerufen werden kann. Betrachten wir dazu ein Beispiel: Starten Sie Ihre IDLE und geben Sie Folgendes ein:

 (lambda x: x + x)(2)

Hier ist die Ausgabe und Code-Erklรคrung:

Diese Fรคhigkeit von Lambdas, sofort aufgerufen zu werden, ermรถglicht es Ihnen, sie innerhalb von Funktionen wie map() und Reduce() zu verwenden. Dies ist nรผtzlich, da Sie diese Funktionen mรถglicherweise nicht noch einmal verwenden mรถchten.

Lambdas in filter()

Die Filterfunktion wird verwendet, um bestimmte Elemente aus einer Folge von Elementen auszuwรคhlen. Die Sequenz kann ein beliebiger Iterator wie Listen, Mengen, Tupel usw. sein.

Die Auswahl der Elemente basiert auf vordefinierten Einschrรคnkungen. Es werden zwei Parameter benรถtigt:

  • Eine Funktion, die die Filtereinschrรคnkung definiert
  • Eine Sequenz (beliebiger Iterator wie Listen, Tupel usw.)

Zum Beispiel,

sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_result = filter (lambda x: x > 4, sequences) 
print(list(filtered_result))

Hier ist die Ausgabe:

[10, 8, 7, 5, 11]

Code Erlรคuterung:

1. In der ersten Anweisung definieren wir eine Liste namens โ€žSequenzenโ€œ, die einige Zahlen enthรคlt.

2. Hier deklarieren wir eine Variable namens filtered_result, die die gefilterten Werte speichert, die von der Funktion filter() zurรผckgegeben werden.

3. Eine Lambda-Funktion, die fรผr jedes Element der Liste ausgefรผhrt wird und โ€žtrueโ€œ zurรผckgibt, wenn es grรถรŸer als 4 ist.

4. Drucken Sie das von der Filterfunktion zurรผckgegebene Ergebnis.

Lambdas in map()

Die map-Funktion dient dazu, eine bestimmte Operation auf jedes Element einer Sequenz anzuwenden. Wie filter() benรถtigt sie ebenfalls zwei Parameter:

  1. Eine Funktion, die die auf den Elementen auszufรผhrende Operation definiert.
  2. Eine oder mehrere Sequenzen

Hier ist beispielsweise ein Programm, das die Quadrate der Zahlen in einer gegebenen Liste druckt:

sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_result = map (lambda x: x*x, sequences) 
print(list(filtered_result))

Ausgang:

 [100, 4, 64, 49, 25, 16, 9, 121, 0, 1]

Code Erlรคuterung:

1. Hier definieren wir eine Liste namens Sequenzen, die einige Zahlen enthรคlt.

2. Wir deklarieren eine Variable namens filtered_result, in der die zugeordneten Werte gespeichert werden.

3. Eine Lambda-Funktion, die auf jedes Element der Liste angewendet wird und das Quadrat dieser Zahl zurรผckgibt.

4. Gib das Ergebnis der map-Funktion aus.

Lambdas in Reduce()

Die Reduce-Funktion wird wie map() verwendet, um eine Operation auf jedes Element in einer Sequenz anzuwenden. Sie unterscheidet sich jedoch in ihrer Funktionsweise von map. Dies sind die Schritte, die die Reduce()-Funktion ausfรผhrt, um eine Ausgabe zu berechnen:

Schritt 1) Fรผhren Sie die definierte Operation fรผr die ersten beiden Elemente der Sequenz aus.

Schritt 2) Dieses Ergebnis speichern.

Schritt 3) Fรผhren Sie die Operation mit dem gespeicherten Ergebnis und dem nรคchsten Element in der Sequenz aus.

Schritt 4) Wiederholen, bis keine Elemente mehr รผbrig sind.

Es benรถtigt auรŸerdem zwei Parameter:

  1. Eine Funktion, die die auszufรผhrende Operation definiert
  2. Eine Sequenz (beliebiger Iterator wie Listen, Tupel usw.)

Hier ist beispielsweise ein Programm, das das Produkt aller Elemente in einer Liste zurรผckgibt:

from functools import reduce
sequences = [1,2,3,4,5]
product = reduce (lambda x, y: x*y, sequences)
print(product)

Hier ist die Ausgabe:

120

Code Erlรคuterung:

1. Importieren Sie reduce aus dem Modul functools.

2. Hier definieren wir eine Liste namens Sequenzen, die einige Zahlen enthรคlt.

3. Wir deklarieren eine Variable namens Produkt, die den reduzierten Wert speichert.

4. Eine Lambda-Funktion, die auf jedes Element der Liste angewendet wird. Sie gibt das Produkt dieser Zahl gemรครŸ dem vorherigen Ergebnis zurรผck.

5. Gib das Ergebnis der reduce-Funktion aus.

Warum (und warum nicht) Lambda-Funktionen verwenden?

Wie Sie im nรคchsten Abschnitt sehen werden, werden Lambdas auf Interpreterebene genauso behandelt wie regulรคre Funktionen. In gewisser Weise kรถnnte man sagen, dass Lambdas eine kompakte Syntax zum Schreiben von Funktionen bereitstellen, die einen einzelnen Ausdruck zurรผckgeben.

Sie sollten jedoch wissen, wann der Einsatz von Lambdas sinnvoll ist und wann Sie diese vermeiden sollten. In diesem Abschnitt lernen Sie einige der verwendeten Designprinzipien kennen. Python Entwickler beim Schreiben von Lambdas.

Einer der hรคufigsten Anwendungsfรคlle fรผr Lambdas ist die funktionale Programmierung, da Python unterstรผtzt ein Paradigma (oder einen Programmierstil), das als funktionale Programmierung bekannt ist.

Es ermรถglicht Ihnen, eine Funktion als Parameter an eine andere Funktion zu รผbergeben (z. B. in `map`, `filter` usw.). In solchen Fรคllen bieten Lambdas eine elegante Mรถglichkeit, eine einmalig benรถtigte Funktion zu erstellen und diese als Parameter zu รผbergeben.

Wann sollten Sie Lambda nicht verwenden?

Sie sollten in einer Produktionsumgebung niemals komplizierte Lambda-Funktionen schreiben. Fรผr Programmierer, die Ihren Code pflegen, wird es sehr schwierig sein, ihn zu entschlรผsseln. Wenn Sie komplexe Einzeiler-Ausdrรผcke erstellen, ist es viel besser, eine richtige Funktion zu definieren. Als bewรคhrte Methode sollten Sie bedenken, dass einfacher Code immer besser ist als komplexer Code.

Lambdas vs. regulรคre Funktionen

Wie bereits erwรคhnt, sind Lambdas Funktionen ohne zugeordneten Bezeichner. Einfacher ausgedrรผckt: Sie sind Funktionen ohne Namen (und daher anonym). Die folgende Tabelle veranschaulicht den Unterschied zwischen Lambdas und regulรคren Funktionen. Python.

Lambdas Regulรคre Funktionen
Syntax:

lambda x : x + x
Syntax:

def (x) :
return x + x 
Lambda-Funktionen kรถnnen nur einen Ausdruck in ihrem Kรถrper haben. Regulรคre Funktionen kรถnnen mehrere Ausdrรผcke und Anweisungen in ihrem Kรถrper haben.
Lambdas haben keinen zugeordneten Namen. Deshalb werden sie auch als anonyme Funktionen bezeichnet. Regulรคre Funktionen mรผssen einen Namen und eine Signatur haben.
Lambdas enthalten keine Return-Anweisung, da der Text automatisch zurรผckgegeben wird. Funktionen, die einen Wert zurรผckgeben mรผssen, sollten eine return-Anweisung enthalten.

Erklรคrung der Unterschiede

Der Hauptunterschied zwischen einer Lambda-Funktion und einer regulรคren Funktion besteht darin, dass die Lambda-Funktion nur einen einzelnen Ausdruck auswertet und ein Funktionsobjekt zurรผckgibt. Folglich kรถnnen wir das Ergebnis der Lambda-Funktion benennen und es in unserem Programm verwenden, wie wir es im vorherigen Beispiel getan haben.

Eine regulรคre Funktion fรผr das obige Beispiel wรผrde so aussehen:

def adder (x, y):
return x + y 
print (adder (1, 2))

Hier mรผssen wir a definieren Name fรผr die Funktion which Rรผckgabe das Ergebnis, wenn wir rufen Sie uns an! Eine Lambda-Funktion enthรคlt keine return-Anweisung, da sie nur einen einzigen Ausdruck besitzt, der standardmรครŸig immer zurรผckgegeben wird. Man muss einer Lambda-Funktion nicht einmal einen Wert zuweisen, da sie sofort aufgerufen werden kann (siehe vorherigen Abschnitt). Wie Sie sehen werden, entfalten Lambdas ihre besondere Stรคrke, wenn wir sie mit โ€ฆ verwenden. Python's integrierte Funktionen.

Sie fragen sich vielleicht immer noch, wie sich Lambdas von einer Funktion unterscheiden, die einen einzelnen Ausdruck zurรผckgibt (wie die oben). Auf Interpreterebene gibt es keinen groรŸen Unterschied. Es mag รผberraschend klingen, aber jede Lambda-Funktion, die Sie in Python wird vom Interpreter als normale Funktion behandelt.

Auf Bytecode-Ebene werden die beiden Definitionen auf die gleiche Weise behandelt. Python Interpreter. Nun kรถnnen Sie keine Funktion benennen. Lambda weil es reserviert ist von PythonAber jeder andere Funktionsname fรผhrt zum gleichen Bytecode.

Hรคufig gestellte Fragen

Ja. Ein Lambda-Ausdruck kann einen bedingten Ausdruck wie beispielsweise `lambda x: 'even' if x % 2 == 0 else 'odd'` verwenden. Er kann jedoch keine vollstรคndige if-Anweisung enthalten, da der Rumpf eines Lambda-Ausdrucks ein einzelner Ausdruck und kein Block von Anweisungen sein muss.

Generell nein. PEP 8 empfiehlt die Verwendung von `def`, wenn eine Funktion einen Namen benรถtigt, da die Bindung eines Lambda-Ausdrucks an eine Variable zwar einen Namen liefert, aber die klarere Namensgebung verloren geht. traceback, das def bereitstellt. Lambdas werden am besten direkt an Funktionen wie sorted(), map() oder filter() รผbergeben.

Nein. Auf Bytecode-Ebene. Python Lambdas und รคquivalente Def-Ausdrรผcke werden gleich behandelt, daher gibt es keinen Geschwindigkeitsvorteil. Ein Lambda spart lediglich eine Codezeile; es wird nicht schneller ausgefรผhrt als eine benannte Funktion, die dieselbe Arbeit verrichtet.

Ja. Ein Lambda-Ausdruck kann Variablen aus dem umschlieรŸenden Gรผltigkeitsbereich lesen und so einen Closure bilden. Innerhalb einer Schleife ist Vorsicht geboten: Der Lambda-Ausdruck erfasst die Variable selbst, nicht ihren aktuellen Wert. Verwenden Sie daher ein Standardargument wie `lambda x, n=n: x + n`, um den Wert einzufrieren.

รœbergeben Sie eine Lambda-Funktion als Schlรผsselargument an `sorted()` oder `list.sort()`. Beispielsweise sortiert `sorted(users, key=lambda u: u['age'])` die Elemente nach Alter. Die Lambda-Funktion gibt an, dassโ€ฆ Python welcher Wert fรผr jedes Element verglichen werden soll, wodurch eine prรคgnante benutzerdefinierte Sortierung ohne separate benannte Funktion ermรถglicht wird.

Nicht direkt, da eine anonyme Lambda-Funktion keinen Namen hat, auf den man verweisen kรถnnte. Man kann dies umgehen, indem man die Lambda-Funktion einer Variablen zuweist und diese Variable aufruft, aber eine normale `def`-Funktion ist die klarere und empfohlene Wahl fรผr Rekursion.

Lambdas ermรถglichen schnelle, direkte Transformationen in KI- und Machine-Learning-Code. Data Scientists verwenden sie fรผr pandas.apply(), map() und filter(), um Daten zu bereinigen oder umzuformen, und als Schlรผsselfunktionen zum Sortieren von Merkmalen.ping Vorverarbeitung kompakt innerhalb grรถรŸerer Trainingspipelines.

GitHub Copilot schlรคgt vollstรคndige Lambda-Ausdrรผcke anhand eines kurzen Kommentars oder des umgebenden Codes vor, einschlieรŸlich der korrekten Parameter und Ausdrรผcke fรผr Aufrufe von `map()`, `filter()` oder `sorted()`. Es kann auch vorschlagen, einen ausfรผhrlichen Lambda-Ausdruck in eine รผbersichtlichere Funktion umzuwandeln, wenn die Lesbarkeit wichtig ist.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: