Python Lambda-Funktionen mit BEISPIELEN

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 in Klammern setzen, wie wir es bei regulรคren Funktionen tun. Der letzte Teil (Ausdruck) ist ein beliebiger gรผltiger Python-Ausdruck, der mit den Parametern arbeitet, die Sie der Funktion bereitstellen.

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))

Hier ist die Ausgabe:

3

Code Erklรคrung

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 zu verstehen. Versuchen wir nun, ein Lambda auszudrucken und das Ergebnis zu sehen. ร–ffnen Sie erneut Ihr 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 passiert hier? Schauen wir uns den Code an, um ihn besser zu verstehen.

Code Erklรคrung

  1. Hier definieren wir a Schnur dass Sie als Parameter an das Lambda รผbergeben.
  2. Wir deklarieren ein Lambda, das eine print-Anweisung aufruft und das Ergebnis ausgibt.

Aber warum gibt das Programm die von uns รผbergebene Zeichenfolge nicht aus? Dies liegt daran, dass das Lambda selbst ein Funktionsobjekt zurรผckgibt. In diesem Beispiel ist das Lambda nicht vorhanden namens durch die Druckfunktion aber einfach Rรผckkehr das Funktionsobjekt und den Speicherort, an dem es gespeichert ist. Das wird an der Konsole gedruckt.

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 fรผhren Sie es aus, indem Sie F5 drรผcken. Sie erhalten eine Ausgabe wie diese.

Ausgang:

some kind of a useless lambda

Jetzt wird das Lambda aufgerufen und die รผbergebene Zeichenfolge wird auf der Konsole ausgegeben. Aber was ist das fรผr eine seltsame Syntax und warum ist die Lambda-Definition in Klammern eingeschlossen? Lassen Sie uns das jetzt verstehen.

Code Erklรคrung

  1. Hier ist die gleiche Zeichenfolge, die wir im vorherigen Beispiel definiert haben.
  2. In diesem Teil definieren wir ein Lambda und rufen es sofort auf, indem wir die Zeichenfolge als Argument รผbergeben. Dabei handelt es sich um ein sogenanntes IIFE, รผber das Sie in den kommenden Abschnitten dieses Tutorials mehr erfahren werden.

Beispiel 4

Schauen wir uns ein letztes Beispiel an, um zu verstehen, wie Lambdas und regulรคre Funktionen ausgefรผhrt werden. Also, รถffnen Sie Ihr 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 etwa so aussehen.

Ausgang:

printer 1 REGULAR CALL

printer 2 REGULAR CALL

printer 1 LAMBDA CALL

printer 2 LAMBDA CALL

Code Erklรคrung

  1. Eine Funktion namens Guru, die eine andere Funktion als ersten Parameter und alle weiteren darauf folgenden Argumente รผbernimmt.
  2. Printer_one ist eine einfache Funktion, die den ihr รผbergebenen Parameter ausdruckt und zurรผckgibt.
  3. โ€žprinter_twoโ€œ รคhnelt โ€žprinter_oneโ€œ, jedoch ohne die Return-Anweisung.
  4. In diesem Teil rufen wir die Guru-Funktion auf und รผbergeben die Druckerfunktionen und einen String als Parameter.
  5. Dies ist die Syntax, um den vierten Schritt (dh das Aufrufen der Guru-Funktion) zu erreichen, jedoch unter Verwendung von Lambdas.

Im nรคchsten Abschnitt erfahren Sie, wie Sie Lambda-Funktionen verwenden Karte(), reduzieren(), , 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 aufrufbar ist, sobald sie definiert ist. Lassen Sie uns dies anhand eines Beispiels verstehen. Zรผnde dein an 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 Elemente, die ausgewรคhlt werden, basieren auf einer vordefinierten Einschrรคnkung. Es benรถtigt 2 Parameter:

  • 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-Erklรคrung:

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 wird verwendet, um eine bestimmte Operation auf jedes Element in einer Sequenz anzuwenden. Wie filter() benรถtigt sie auch zwei Parameter:

  1. Eine Funktion, die die Operation definiert, die fรผr die Elemente ausgefรผhrt werden soll
  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]

[KR1]

Code-Erklรคrung:

  1. Hier definieren wir eine Liste namens โ€žSequenzenโ€œ, die einige Zahlen enthรคlt.
  2. Wir deklarieren eine Variable namens filtered_result, die die zugeordneten Werte speichert
  3. Eine Lambda-Funktion, die fรผr jedes Element der Liste ausgefรผhrt wird und das Quadrat dieser Zahl zurรผckgibt.
  4. Drucken Sie das von der Kartenfunktion zurรผckgegebene Ergebnis.

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) Speichern Sie dieses Ergebnis

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-Erklรคrung:

  1. Importieren Sie Reduce aus dem Functools-Modul
  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 fรผr jedes Element der Liste ausgefรผhrt wird. Es wird das Produkt dieser Zahl gemรครŸ dem vorherigen Ergebnis zurรผckgegeben.
  5. Drucken Sie das von der Reduce-Funktion zurรผckgegebene Ergebnis 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 die Verwendung von Lambdas sinnvoll ist und wann Sie sie vermeiden sollten. In diesem Abschnitt lernen Sie einige der Designprinzipien kennen, die Python-Entwickler beim Schreiben von Lambdas verwenden.

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

Es ermรถglicht Ihnen, eine Funktion als Parameter fรผr eine andere Funktion bereitzustellen (z. B. in einer Karte, einem Filter usw.). In solchen Fรคllen bietet die Verwendung von Lambdas eine elegante Mรถglichkeit, eine einmalige 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[vV4][J5] lediglich Funktionen, an die kein Bezeichner gebunden ist. Einfacher ausgedrรผckt handelt es sich um Funktionen ohne Namen (daher anonym). Hier ist eine Tabelle, um den Unterschied zwischen Lambdas und regulรคren Funktionen in Python zu veranschaulichen.

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.

Mit Lambdas ist kein Name verknรผpft. Aus diesem Grund 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! es. Eine Lambda-Funktion enthรคlt keine return-Anweisung, da sie nur einen einzigen Ausdruck hat, der standardmรครŸig immer zurรผckgegeben wird. Sie mรผssen nicht einmal ein Lambda zuweisen, da es sofort aufgerufen werden kann (siehe nรคchster Abschnitt). Wie Sie im folgenden Beispiel sehen werden, werden Lambdas besonders leistungsfรคhig, 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.

Wie Sie im Diagramm sehen kรถnnen, werden die beiden Definitionen vom Python-Interpreter bei der Konvertierung in Bytecode auf die gleiche Weise behandelt. Jetzt kรถnnen Sie einer Funktion keinen Namen geben Lambda weil es reserviert ist von Python, aber jeder andere Funktionsname ergibt den gleichen Bytecode[KR6].

Zusammenfassung

  • Lambdas, auch anonyme Funktionen genannt, sind kleine, eingeschrรคnkte Funktionen, die keinen Namen (also keine Kennung) benรถtigen.
  • Jede Lambda-Funktion in Python besteht aus 3 wesentlichen Teilen:
  • Das Lambda-Schlรผsselwort.
  • Die Parameter (oder gebundenen Variablen) und
  • Der Funktionskรถrper.
  • Die Syntax zum Schreiben eines Lambda lautet: Lambda-Parameter: Ausdruck
  • Lambdas kรถnnen beliebig viele Parameter haben, sie sind jedoch nicht in geschweifte Klammern eingeschlossen
  • Ein Lambda kann nur einen Ausdruck in seinem Funktionskรถrper haben, der standardmรครŸig zurรผckgegeben wird.
  • Auf Bytecode-Ebene gibt es keinen groรŸen Unterschied zwischen der Art und Weise, wie Lambdas und regulรคre Funktionen vom Interpreter behandelt werden.
  • Lambdas unterstรผtzen IIFE durch diese Syntax: (Lambda-Parameter: Ausdruck)(Argument)
  • Lambdas werden hรคufig mit den folgenden integrierten Python-Elementen verwendet:
  • Filter: Filter (Lambda-Parameter: Ausdruck, iterierbare Sequenz)
  • Karte: Karte (Lambda-Parameter: Ausdruck, iterierbare Sequenzen)
  • Reduzieren: Reduzieren (Lambda-Parameter1, Parameter2: Ausdruck, iterierbare Sequenz)
  • Schreiben Sie keine komplizierten Lambda-Funktionen in einer Produktionsumgebung, da dies fรผr Code-Betreuer schwierig sein wird.

[J5]Ich habe eine Tabelle hinzugefรผgt, aber die Erklรคrung ist notwendig, um die Unterschiede zu verstehen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: