EMZETT.
Login

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

Kapitel 24 von 44 im Kurs Python. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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
HALLO

Lambda: 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
PYTHON

Lambdas 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
Tom

map: 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" Werte

Ausgabe:

[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
abc

Fü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 70

Hinweis

Lambdas dürfen nur einen Ausdruck enthalten, keine Anweisungen wie if-Blöcke oder Zuweisungen. Wird es länger, schreibe eine normale Funktion mit def.

Merke

  • Funktionen sind Werte: speicherbar, übergebbar, zurückgebbar
  • lambda x: ausdruck ist eine kleine namenlose Funktion
  • key= bei sorted, min, max nimmt eine Funktion
  • map wendet an, filter wählt aus, reduce fasst 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]

Weiter im Kurs

Zurück: Gültigkeitsbereich (Scope)

Weiter: Rekursion

Alle Kapitel: Python im Überblick