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.