In diesem Lernprogramm erfahren Sie alles über die Verwendung von Lambda-Funktionen in Python – von der Syntax zur Definition von Lambda-Funktionen bis hin zu den verschiedenen Anwendungsfällen mit Codebeispielen.

In Python sind Lambdas anonyme Funktionen, die eine prägnante Syntax haben und mit anderen hilfreichen eingebauten Funktionen verwendet werden können. Am Ende dieses Tutorials werden Sie gelernt haben, wie man Lambda-Funktionen definiert und wann Sie sie im Vergleich zu regulären Python-Funktionen verwenden sollten.

Fangen wir an!

Python Lambda-Funktion: Syntax und Beispiele

Hier ist die allgemeine Syntax, um eine Lambda-Funktion in Python zu definieren:

lambda parameter(s):Rückgabewert

In der obigen allgemeinen Syntax:

  • lambda ist das Schlüsselwort, das Sie verwenden sollten, um eine Lambda-Funktion zu definieren, gefolgt von einem oder mehreren Parametern, die die Funktion annehmen soll.
  • Ein Doppelpunkt trennt die Parameter und den Rückgabewert.

bei der Definition einer Lambda-Funktion sollten Sie darauf achten, dass der Rückgabewert durch Auswertung eines Ausdrucks berechnet wird, der sich über eine einzige Codezeile erstreckt. Sie werden dies besser verstehen, wenn wir Beispiele codieren.

Beispiele für Python-Lambda-Funktionen

Der beste Weg, Lambda-Funktionen zu verstehen, ist, damit zu beginnen, reguläre Python-Funktionen in Lambda-Funktionen umzuschreiben.

👩🏽‍💻 Sie können in einer Python REPL oder mit diesem Python Online-Compiler programmieren.

#1. Betrachten Sie die folgende Funktion square(), die eine Zahl, num, als Argument annimmt und das Quadrat der Zahl zurückgibt.

def square(num):
    return num*num

Sie können die Funktion mit Argumenten aufrufen und überprüfen, ob sie korrekt funktioniert.

>>> Quadrat(9)
81
>>> Quadrat(12)
144

Sie können diesen Lambda-Ausdruck einem Variablennamen zuweisen, z.B. square1, um die Funktionsdefinition prägnanter zu machen: square1 = lambda num: num*num und dann die Funktion square1 mit einer beliebigen Zahl als Argument aufrufen. Wir wissen jedoch, dass Lambdas anonyme Funktionen sind, daher sollten Sie es vermeiden, sie einer Variablen zuzuweisen.

Bei der Funktion square() ist der Parameter num und der Rückgabewert ist num*num. Nachdem wir diese identifiziert haben, können wir sie in den Lambda-Ausdruck einfügen und ihn mit einem Argument aufrufen, wie gezeigt:

>>> (lambda num: num*num)(2)
4

Dies ist das Konzept des Immediately Invoked Function Expression, bei dem wir eine Funktion direkt nach ihrer Definition aufrufen.

#2. Als Nächstes schreiben wir eine weitere einfache Funktion add() um, die die Zahlen num1 und num2 annimmt und ihre Summe num1 num2 zurückgibt.

def add(zaehl1,zaehl2):
    return num1 num2

Lassen Sie uns die Funktion add() mit zwei Zahlen als Argumente aufrufen:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

In diesem Fall sind num1 und num2 die beiden Parameter und der Rückgabewert ist num1 num2.

>>> (lambda num1, num2: num1 num2)(3,7)
10

Python-Funktionen können auch Standardwerte für Parameter annehmen. Lassen Sie uns die Definition der Funktion add() ändern und den Standardwert des Parameters num2 auf 10 setzen.

def add(zaehl1, zaehl2=10):
    return num1 num2

In den folgenden Funktionsaufrufen:

  • Im ersten Funktionsaufruf ist der Wert von num1 gleich 1 und der Wert von num2 gleich 3. Wenn Sie im Funktionsaufruf den Wert für num2 übergeben, wird dieser Wert verwendet; die Funktion gibt 4 zurück.
  • Wenn Sie jedoch nur ein Argument übergeben(num1 ist 7), wird der Standardwert von 10 für num2 verwendet; die Funktion gibt 17 zurück.
>>> add(1,3)
4
>>> add(7)
17

Wenn Sie Funktionen schreiben, die Standardwerte für bestimmte Parameter als Lambda-Ausdrücke übernehmen, können Sie den Standardwert bei der Definition der Parameter angeben.

>>> (lambda num1, num2 = 10: num1 num2)(1)
11

Wann sollten Sie Lambda-Funktionen in Python verwenden?

Nachdem Sie nun die Grundlagen der Lambda-Funktionen in Python kennengelernt haben, hier ein paar Anwendungsfälle:

  • Wenn Sie eine Funktion haben, deren Rückgabeausdruck aus einer einzigen Codezeile besteht und Sie die Funktion nicht an anderer Stelle im gleichen Modul referenzieren müssen, können Sie Lambda-Funktionen verwenden. Wir haben auch ein paar Beispiele codiert, um dies zu verstehen.
  • Sie können Lambda-Funktionen verwenden, wenn Sie integrierte Funktionen wie map(), filter() und reduce() einsetzen.
  • Lambda-Funktionen können bei der Sortierung von Python-Datenstrukturen wie Listen und Wörterbüchern hilfreich sein.

Wie Sie Python Lambda mit eingebauten Funktionen verwenden

#1. Verwendung von Lambda mit Map()

Die Funktion map() nimmt eine Iterable und eine Funktion auf und wendet die Funktion auf jedes Element in der Iterable an, wie gezeigt:

python-lambda-with-map

Wir erstellen eine Liste nums und verwenden die Funktion map(), um eine neue Liste zu erstellen, die das Quadrat jeder Zahl in der Liste nums enthält. Beachten Sie die Verwendung der Lambda-Funktion, um die Quadrierungsoperation zu definieren.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Da die Funktion map() ein map-Objekt zurückgibt, sollten wir es in eine Liste umwandeln.

▶️ Sehen Sie sich dieses Tutorial über die map-Funktion von Python an.

#2. Verwendung von Lambda mit Filter()

Lassen Sie uns nums, eine Liste von Zahlen, definieren:

>>> nums = [4,5,6,9]

Nehmen wir an, Sie möchten diese Liste filtern und nur die ungeraden Zahlen beibehalten.

Dazu können Sie die integrierte Funktion filter() von Python verwenden.

Die Funktion filter() nimmt eine Bedingung und eine Iterable auf: filter(Bedingung, Iterable). Das Ergebnis enthält nur die Elemente in der ursprünglichen Iterablen, die die Bedingung erfüllen. Sie können das zurückgegebene Objekt in eine Python-Iterable wie z.B. list umwandeln.

python-lambda-with-filter

Um alle geraden Zahlen herauszufiltern, behalten wir nur die ungeraden Zahlen bei. Der Lambda-Ausdruck sollte also lauten lambda num: num%2!=0. Die Menge num%2 ist der Rest, wenn num durch 2 geteilt wird.

  • num%2!=0 ist True, wenn num ungerade ist, und
  • num%2!=0 ist Falsch, wenn num gerade ist.
>>> nums = [4,5,6,9]
>>> list(filter(lambda zaehler:zaehler%2!=0,zaehler))
[5, 9]

#3. Verwendung von Lambda mit Reduce()

Die Funktion reduce() nimmt eine Iterable und eine Funktion auf. Sie reduziert die Iterable, indem sie die Funktion iterativ auf die Elemente der Iterable anwendet.

python-lambda-with-reduce

Um die Funktion reduce() zu verwenden, müssen Sie sie aus dem in Python integrierten Modul functools importieren:

>>> from functools import reduce

Lassen Sie uns die Funktion reduce() verwenden, um die Summe aller Zahlen in der Liste nums zu berechnen. Wir definieren einen Lambda-Ausdruck: lambda num1,num2:num1 num2, als reduzierende Summenfunktion.

Die Reduktionsoperation wird wie folgt ablaufen: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Hier ist f die Summierungsoperation für zwei Elemente der Liste, definiert durch die Lambda-Funktion.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda zaehl1,zaehl2:zaehl1 zaehl2,zaehl)
24

Wenn Sie sich nicht sicher sind, was Summen sind, können Sie hier nachlesen, wie Sie die Summenfunktion von Python verstehen.

Python Lambda-Funktionen zum Anpassen der Sortierung

Sie können Lambda-Funktionen nicht nur mit eingebauten Python-Funktionen wie map(), filter() und reduce() verwenden, sondern auch, um die eingebauten Funktionen und Methoden für die Sortierung anzupassen.

img

#1. Sortieren von Python-Listen

Wenn Sie mit Python-Listen arbeiten, müssen Sie diese oft nach bestimmten Kriterien sortieren. Um Python-Listen an Ort und Stelle zu sortieren, können Sie die eingebaute sort() -Methode auf sie anwenden. Wenn Sie eine sortierte Kopie der Liste benötigen, können Sie die Funktion sorted() verwenden.

Die Syntax zur Verwendung der Python-Funktion sorted() lautet sorted(iterable, key=...,reverse= True | False).

– Der Parameter key wird verwendet, um die Sortierung anzupassen.
– Der Parameter reverse kann auf True oder False gesetzt werden; der Standardwert ist False.

Beim Sortieren von Listen mit Zahlen und Zeichenketten wird standardmäßig in aufsteigender bzw. alphabetischer Reihenfolge sortiert. Es kann jedoch vorkommen, dass Sie ein eigenes Kriterium für die Sortierung festlegen möchten.

Betrachten Sie die folgende Liste Früchte. Angenommen, Sie möchten eine sortierte Kopie der Liste erhalten. Sie sollten die Zeichenketten nach der Anzahl der Vorkommen von ‘p’ in ihnen sortieren – in absteigender Reihenfolge.

>>> fruits = ['apple','pineapple','grapes','mango']

Jetzt ist es an der Zeit, den optionalen Parameter key zu verwenden. Eine Zeichenkette ist in Python eine Iterable und um die Anzahl der Vorkommen eines Zeichens in ihr zu ermitteln, können Sie die eingebaute Methode .count() verwenden. Also setzen wir den Schlüssel auf lambda x:x.count('p'), so dass die Sortierung auf der Anzahl des Vorkommens von ‘p’ in der Zeichenkette basiert.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['Ananas', 'Apfel', 'Weintrauben', 'Mango']

In diesem Beispiel:

  • Der Schlüssel, nach dem sortiert werden soll, ist die Anzahl der Vorkommen des Zeichens ‘p’, und er ist als Lambda-Ausdruck definiert.
  • Da wir den Parameter reverse auf True gesetzt haben, erfolgt die Sortierung in der absteigenden Reihenfolge der Anzahl der Vorkommen von ‘p’.

In der Liste der Früchte enthält ‘Ananas’ 3 Vorkommen von ‘p’ und die Zeichenketten ‘Apfel’, ‘Weintrauben’ und ‘Mango’ enthalten 2, 1 bzw. 0 Vorkommen von ‘p’.

Stabile Sortierung verstehen

Betrachten Sie ein anderes Beispiel. Für dasselbe Sortierkriterium haben wir die Liste der Früchte neu definiert. Hier kommt ‘p’ in den Zeichenketten ‘Apfel’ und ‘Weintrauben’ zweimal bzw. einmal vor. Und in den Zeichenketten ‘mango’ und ‘melon’ kommt es nie vor.

>>> Früchte = ['Mango','Apfel','Melone','Weintrauben']
>>> sortiert(fruits,key=lambda x:x.count('p'),reverse=True)
['Apfel', 'Weintrauben', 'Mango', 'Melone']

In der Ausgabeliste steht ‘Mango’ vor ‘Melone’, obwohl beide nicht das Zeichen ‘p’ enthalten. Aber warum ist dies der Fall? Die Funktion sorted() führt eine stabile Sortierung durch. Wenn also die Anzahl von ‘p’ bei zwei Zeichenketten gleich ist, bleibt die Reihenfolge der Elemente in der ursprünglichen Obstliste erhalten.

Als kurze Übung tauschen Sie die Positionen von ‘Mango’ und ‘Melone’ in der Obstliste aus, sortieren die Liste nach demselben Kriterium und beobachten die Ausgabe.

▶️ Erfahren Sie mehr darüber, wie man Listen in Python sortiert.

#2. Sortieren eines Python-Wörterbuchs

Sie können Lambdas auch beim Sortieren von Python-Wörterbüchern verwenden. Betrachten Sie das folgende Wörterbuch price_dict, das Artikel und deren Preise enthält.

>>> price_dict = {
... 'Milch':10,
... 'Honig':15,
... 'Brot':7,
... 'Süßigkeiten':3
... }

Um die Schlüssel-Wert-Paare eines Wörterbuchs als eine Liste von Tupeln zu erhalten, können Sie die eingebaute Wörterbuchmethode .items() verwenden:

>>> price_dict_items = price_dict.items()
dict_items([('Milch', 10), ('Honig', 15), ('Brot', 7), ('Süßigkeiten', 3)])

In Python folgen alle Iterablen: Listen, Tupel, Strings und mehr, der Null-Indexierung. Das erste Element steht also bei Index 0, das zweite Element bei Index 1 und so weiter.

Wir möchten nach dem Wert sortieren, d.h. nach dem Preis der einzelnen Artikel im Wörterbuch. In jedem Tupel in der Liste price_dict_items ist das Element bei Index 1 der Preis. Also setzen wir den Schlüssel auf lambda x:x<x>[1]</x>, um das Wörterbuch nach dem Element mit dem Index 1, dem Preis, zu sortieren.

>>> dict(sorted(preis_dict_items,key=lambda x:x[1]))
{'Süßigkeiten': 3, 'Brot': 7, 'Milch': 10, 'Honig': 15}

In der Ausgabe wurden die Wörterbucheinträge in aufsteigender Reihenfolge der Preise sortiert: beginnend mit ‘Candy’, mit einem Preis von 3 Einheiten, bis zu ‘Honey’, mit einem Preis von 15 Einheiten.

▶️ Wenn Sie mehr erfahren möchten, lesen Sie diese ausführliche Anleitung zum Sortieren von Wörterbüchern nach Schlüssel und Wert in Python.

Resümee

Und da haben Sie es! Sie haben gelernt, wie man Lambda-Funktionen definiert und sie effektiv mit anderen eingebauten Python-Funktionen verwendet. Hier ist eine Zusammenfassung der wichtigsten Erkenntnisse:

  • In Python sind Lambdas anonyme Funktionen, die mehrere Argumente entgegennehmen und einen Wert zurückgeben können; der Ausdruck, der ausgewertet wird, um diesen Rückgabewert zu erzeugen, sollte aus einer Zeile Code bestehen. Sie können verwendet werden, um kleine Funktionsdefinitionen prägnanter zu gestalten.
  • Um die Lambda-Funktion zu definieren, können Sie die Syntax: Lambda Parameter: Rückgabewert verwenden.
  • Einige der wichtigsten Anwendungsfälle sind die Verwendung mit den Funktionen map(), filter() und reduce() sowie als Schlüsselparameter zur Anpassung der Sortierung von Python-Iterablen.

Viel Spaß beim Programmieren!