16.7. First-Class-Funktion#

Wie in JavaScript, so sind Funktionen in Python ebenfalls First-Class-Funktionen (Funktionen erster Klasse). Das bedeutet im Wesentlichen, dass es keinen Unterschied mit dem Umgang zwischen Funktionen und Daten gibt.

def f(x, y):
    return 2*x + y

Wir können einer Variable eine Zahl wie auch eine Funktion zuweisen.

variable = f
variable(3, 2)
8

Wir können Funktionen in Datenstrukturen packen.

functions = [f, f, max, min]
for func in functions:
    print(func(5, -6))
4
4
5
-6

Wir können Funktionen als Argumente übergeben und als Funktionswerte zurückgeben.

def h(x, func):
    return func(3, x) + x

h(10, f)
26

Doch richtig fällt uns der Unterschied erst auf, wenn wir eine Sprache betrachten, für die Funktionen keine First-Class-Funktionen sind. Beispiele wären Java, C/C++, und viele mehr. Es hat sich gezeigt, dass First-Class-Funktionen eine wertvolle Spracheigenschaft ist und Sprachen wie Java versuchen diese durch syntaktische Tricks zu simulieren.

In Java können wir mittlerweile Funktionen ähnlich wie First-Class-Funktionen behandeln. Ein Beispiel:

Function<Integer> func = (x) -> x * x;
func(5);

Hierbei ist

(x) -> x * x

eine anonymen Funktion die wir scheinbar einer Variablen func zuweisen. Doch im Hintergrund wird ein ganzes Objekt (Daten + Funktionen) erstellt, welches keine Daten und nur eine Funktion enthält.

Sind Funktionen First-Class-Funktionen, so ist man als Programmierer*in eher dazu ermuntert mehr in Funktionen als in Objekten und Methoden zu denken.