265
Auch Funktionen sind Objekte
>>> fak(49)//(fak(6)*fak(49-6))
13983816
Nur für den Fall, dass du geglaubt hast, dass n! im täglichen Leben nicht
gebraucht wird. (In Österreich wird übrigens »6 aus 45« gespielt. Wie viele
verschiedene Tipps gibt es da?)
Auch Funktionen sind Objekte
Sieh dir mit dem IPI nun einmal an, was es bedeutet, dass Funktionen in
Python Objekte sind:
>
Mach mit!
>>> from math import sqrt
>>> sqrt
<built-in function sqrt>
>>> from turtle import *
>>> penup
<function penup at 0x00A302C8>
Und ebenso erhältst du für selbst definierte Funktionen:
>>> def quadrat(x):
return x * x
>>> quadrat
<function quadrat at 0x00A4D880>
Wie jedes Objekt können auch Funktionen als Argumente übergeben wer-
den – an andere Funktionen, wenn diese aufgerufen werden. Damit können
wir zum Beispiel ein Programm für die Ausgabe von Wertetabellen ver-
schiedener Funktionen schreiben.
Am Anfang dieses Kapitels haben wir eine Wertetabelle für die Funktion
quadrat()
erzeugt. Das ging etwa so:
>
Mach weiter mit!
>>> for n in range(5):
print(n, quadrat(n))
0 0
1 1
2 4
3 9
4 16
266
Funktionen mit Wert
Kapitel
1
0
Eine andere Tabelle erhalten wir für die Wurzelfunktion:
>>> for n in range(11,15):
print(n, sqrt(n))
11 3.31662479036
12 3.46410161514
13 3.60555127546
14 3.74165738677
Hier habe ich den Zahlenbereich der Tabelle geändert und die Funktion,
deren Werte ausgedruckt werden sollen. Ich schreibe nun eine weitere
Funktion, die diese beiden veränderlichen Bestandteile als Parameter hat
und solch eine Tabelle ausdruckt:
>>> def tabelle(bereich, funktion):
for n in bereich:
print(n, funktion(n))
Das ist genau unseren zwei Tabellenaufrufen von oben abgekupfert. Und es
funktioniert:
>>> tabelle(range(5), quadrat)
liefert dieselbe Wertetabelle für die
quadrat()
-Funktion, die oben steht.
Ebenso:
>>> tabelle(range(11,15), sqrt)
Hier kommt es besonders darauf an, dass du den Unterschied zwischen
dem
Aufruf
einer Funktion und dem Funktionsobjekt genau verstehst. Ich
erläutere ihn deshalb nochmals am letzten Beispiel. Dort wird der Funktion
tabelle()
als erstes Argument
der Wert von
range(11,15)
übergeben,
>>> range(11,15)
range(11, 15)
also dieses spezielle Wertevorrat-Objekt. Es wird dem Parameternamen
bereich
zugewiesen.
Beachte, dass die Funktion
sqrt
vor der Ausführung von
tabelle()
nicht
aufgerufen
, sondern als Objekt übergeben wird. Das Funktionsobjekt
sqrt
wird also dem Parameternamen
funktion
zugewiesen. Da es eine Funkti-
on ist, ist dieses Objekt selbst
ausführbar
. Und schließlich wird es auch
ausgeführt: nämlich bei jedem Schleifendurchgang einmal, durch den Auf-
ruf
funktion(n)
.
Das Schlaue an dieser Vorgangsweise ist, dass du dich vor oder bei der Pro-
grammierung der Funktion
tabelle()
noch nicht entscheiden musst, für
welche
funktion
eine Wertetabelle ausgegeben werden soll. Und dass du
mit
tabelle()
Wertetabellen für verschiedenste Funktionen und Bereiche
erzeugen kannst.

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.