251
Wir definieren eine Funktion mit Rückgabewert
>>> from turtle import *
>>> forward(20*sqrt(2))
… mit dem bekannten
Effekt
, dass die Turtle … (wie viel? Hilf mir, IPI) …
>>> 20 * sqrt(2)
28.284271247461902
… (ah ja!) … also ungefähr 28.3 Pixel nach vorne wandert.
>>> tuple(range(3,9))
(3, 4, 5, 6, 7, 8)
Im letzten Beispiel gibt die Funktion
range()
ein dynamisches Wertevor-
rat-Objekt zurück, das als Argument für
tuple()
eingesetzt wird.
tuple()
erzeugt daraus ein Zahlentupel und gibt dieses zurück.
Wir definieren eine Funktion mit
Rückgabewert
Nicht erst eben, sondern schon im ersten Kapitel dieses Buches hast du die
Quadratwurzel-Funktion verwendet:
>>> sqrt(4)
2.0
Wir möchten nun die Funktion definieren, die die umgekehrte Rechenope-
ration ausführt: Sie berechnet das Quadrat einer Zahl. Hätte ich das von dir
im vorigen Kapitel verlangt, hättest du vielleicht geantwortet: Kein Prob-
lem!
>
Mach mit!
>>> def quadrat(x):
print("Das Quadrat von", x, "ist", x*x)
>>> quadrat(5)
Das Quadrat von 5 ist 25
Das ist ja ganz nett, aber zum Rechnen ist es leider völlig unbrauchbar!
Angenommen, wir wollen damit ausrechnen, wie viel das Quadrat von 24
plus dem Quadrat von 7 ist:
>>> quadrat(24) + quadrat(7)
Das quadrat von 24 ist 576
Das quadrat von 7 ist 49
Traceback (most recent call last):
File "<pyshell#17>", line 1, in ?
252
Funktionen mit Wert
Kapitel
1
0
quadrat(24) + quadrat(7)
TypeError: unsupported operand type(s) for +: 'NoneType' and
'NoneType'
Diese (noch) etwas rätselhafte Fehlermeldung besagt, dass die beiden
Funktionsaufrufe
quadrat(24)
und
quadrat(7)
keine Zahlen zurückge-
geben haben und der Operator + daher nichts addieren konnte.
Die Quadrat-Funktion hat zwar einen
Effekt
; das heißt, sie tut etwas: Sie
gibt mit Hilfe der
print()
-Funktion das Quadrat des Arguments auf dem
Bildschirm aus. Aber sie gibt keinen Wert zurück.
Um nochmals klarzustellen, was wir wollen: Wir wollen, dass
quadrat
auf
die gleiche Weise arbeitet wie
sqrt()
:
>>> sqrt(36) + sqrt(169)
19.0
Also müssen wir für unsere
quadrat()
-Funktion erreichen, dass die be-
rechneten Werte nach der Berechnung »außerhalb der Funktion« verfügbar
sind. Dafür hat Python eine spezielle Anweisung, die
return
-Anweisung:
>>> def quadrat(x):
qu = x*x
return qu
>>> quadrat(24)
576
>>> quadrat(7)
49
>>> quadrat(24)+quadrat(7)
625
Wir berechnen im Funktionskörper von
quadrat()
zuerst den gesuchten
Wert und speichern ihn in einer lokalen Variablen. Das ist von außen nicht
sichtbar. Dann geben wir diesen Wert mit der
return
-Anweisung zurück.
>
Schreibe nun den Code für die Funktion
quadrat()
in ein Skript
quadrat.py
nach dem folgenden Muster. Überlege gleich anhand
der Abbildung, was geschieht, wenn du dieses Programm laufen lässt.
253
Wir definieren eine Funktion mit Rückgabewert
Nun haben wir die Funktion
quadrat()
korrekt definiert. Doch der Ablauf
des Programms
(F5)
hat keinerlei Effekt. Der Grund dafür ist, dass hier die
Funktion nicht in der richtigen Weise gebraucht wird!
Die Quadrate von 24 und 7 werden zwar berechnet und sogar addiert, aber
dann sofort »vergessen«. Das Ergebnis wird weder ausgegeben noch gespei-
chert. Null Effekt!
Hüte dich vor folgender Ver-
schlimmbesserung – also
mach diesmal NICHT mit:
Denn wenn du mit dieser
quadrat()
-Funktion den
pythagoräischen Lehrsatz
verwenden willst – und in
der Computergrafik wirst du
auf Dauer kaum ohne ihn
auskommen –, erhältst du
Folgendes:
Und so etwas kann man
wirklich nicht brauchen. Je
mehr Rechnungen du durch-
führst, desto mehr wird der
Bildschirm mit Zeug voll
geschrieben! Was ist der
Grund dafür? Diese Funktion
quadrat()
hat
einen
Effekt
(sie gibt eine Meldung aus)
und
sie
gibt
einen
Wert zuck
. So etwas sollte man in der Regel vermeiden!
Stattdessen lassen wir in unserem ursprünglichen Skript die Funktion
quadrat()
, wie sie ist, und berichtigen nur die Zeilen, die unterhalb der
Definition der Funktion stehen, also die Anwendung der Funktion. Dann
sieht unser Skript
quadrat.py
(ohne Kopfkommentar) so aus:

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.