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(), 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 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: