Kurz: Funktionen sind in Python Werte wie alle anderen: Du kannst sie in Variablen speichern, in Listen legen und als Argumente an andere Funktionen übergeben. Darauf bauen die Werkzeuge dieses Kapitels auf.
Teil des Kurses Python
Funktionen sind in Python Werte wie alle anderen: Du kannst sie in Variablen speichern, in Listen legen und als Argumente an andere Funktionen übergeben. Darauf bauen die Werkzeuge dieses Kapitels auf.
Funktionen als Werte
def verdopple(x):
return x * 2
f = verdopple # ohne Klammern: die Funktion selbst, kein Aufruf
print(f(21))
def wende_an(funktion, wert):
return funktion(wert)
print(wende_an(verdopple, 5))
print(wende_an(str.upper, "hallo"))Ausgabe:
42
10
HALLOLambda: kleine namenlose Funktionen
Ein Lambda-Ausdruck ist eine Funktion in einer Zeile ohne Namen: lambda parameter: ausdruck. Das Ergebnis des Ausdrucks wird automatisch zurückgegeben.
quadrat = lambda x: x * x
addiere = lambda a, b: a + b
print(quadrat(6))
print(addiere(2, 3))
print((lambda s: s.upper())("python"))Ausgabe:
36
5
PYTHONLambdas sind nützlich für kurze Hilfsfunktionen, die du nur einmal brauchst, vor allem als Argument für sorted, max, min, map und filter.
sorted, min und max mit key
woerter = ["Banane", "Kiwi", "Apfel", "Zitrone"]
print(sorted(woerter, key=lambda w: len(w)))
print(max(woerter, key=len))
print(min(woerter, key=lambda w: w[-1]))
personen = [{"name": "Mia", "alter": 25}, {"name": "Tom", "alter": 19}]
juengste = min(personen, key=lambda p: p["alter"])
print(juengste["name"])Ausgabe:
['Kiwi', 'Apfel', 'Banane', 'Zitrone']
Zitrone
Banane
Tommap: auf jedes Element anwenden
map(funktion, sammlung) wendet eine Funktion auf alle Elemente an und liefert einen Iterator (mit list() wird daraus eine Liste):
zahlen = [1, 2, 3, 4]
print(list(map(lambda x: x ** 2, zahlen)))
print(list(map(str, zahlen)))
print(list(map(lambda a, b: a + b, [1, 2], [10, 20])))Ausgabe:
[1, 4, 9, 16]
['1', '2', '3', '4']
[11, 22]filter: Elemente auswählen
filter(funktion, sammlung) behält die Elemente, für die die Funktion einen wahren Wert liefert:
zahlen = range(1, 11)
print(list(filter(lambda x: x % 3 == 0, zahlen)))
print(list(filter(None, [0, 1, "", "a", [], [2]]))) # entfernt "falsche" WerteAusgabe:
[3, 6, 9]
[1, 'a', [2]]Comprehension oder map/filter?
Dasselbe geht oft mit List Comprehensions, die in Python meist als lesbarer gelten:
zahlen = [1, 2, 3, 4, 5, 6]
print([x ** 2 for x in zahlen if x % 2 == 0])
print(list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, zahlen))))Ausgabe:
[4, 16, 36]
[4, 16, 36]reduce: auf einen Wert zusammenfassen
Aus functools kommt reduce, das eine Liste Schritt für Schritt zu einem Wert verdichtet:
from functools import reduce
print(reduce(lambda a, b: a * b, [1, 2, 3, 4, 5]))
print(reduce(lambda a, b: a + b, ["a", "b", "c"]))Ausgabe:
120
abcFür Summen, Minimum und Maximum gibt es aber sum, min und max, die deutlich klarer sind.
Funktionen zurückgeben
Eine Funktion kann eine andere Funktion erzeugen (Funktionsfabrik):
def multiplikator(faktor):
return lambda x: x * faktor
mal3 = multiplikator(3)
mal10 = multiplikator(10)
print(mal3(7), mal10(7))Ausgabe:
21 70Hinweis
Lambdas dürfen nur einen Ausdruck enthalten, keine Anweisungen wie
if-Blöcke oder Zuweisungen. Wird es länger, schreibe eine normale Funktion mitdef.
Merke
- Funktionen sind Werte: speicherbar, übergebbar, zurückgebbar
lambda x: ausdruckist eine kleine namenlose Funktionkey=beisorted,min,maxnimmt eine Funktionmapwendet an,filterwählt aus,reducefasst zusammen- Comprehensions sind oft lesbarer als
map/filter
Übungsaufgabe
Sortiere die Liste [(1, "b"), (3, "a"), (2, "c")] einmal nach der Zahl und einmal nach dem Buchstaben.
Quiz zur Selbstkontrolle
))?
- [2, 3, 4] (richtig)
- [1, 2, 3]
- 6
- [1, 2, 3, 1]
Wofür verwendet man key= bei sorted()?
- Um das Sortierkriterium über eine Funktion festzulegen (richtig)
- Um Schlüssel eines Dictionaries zu holen
- Um die Sortierung umzukehren
- Um doppelte Werte zu entfernen
Was darf ein Lambda nicht enthalten?
- Anweisungen wie Zuweisungen oder if-Blöcke (richtig)
- Einen Parameter
- Einen Funktionsaufruf
- Zahlen
Weiter im Kurs
Zurück: Gültigkeitsbereich (Scope)
Weiter: Rekursion
Alle Kapitel: Python im Überblick