O'Reilly logo

Python für Kids by Gregor Lingl

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

133
5
Funktionen mit
Parametern
In den ersten Kapiteln dieses Buches hast du gelernt, eine Reihe von Funk-
tionen des
turtle-
Moduls anzuwenden. Im vierten Kapitel hast du erfah-
ren, wie du eigene Funktionen definieren kannst. Die meisten Turtle-Grafik-
Anweisungen – wie zum Beispiel
forward()
– verlangen Argumente, um
ihre Aufgabe ausführen zu können. Es wäre sehr praktisch, wenn unsere
eigenen Funktionen das auch könnten. Zum Beispiel wäre es fein
>>> dreieck(100)
schreiben zu können, anstatt
>>> seite = 100
>>> dreieck()
Wie das geht und welche Vorteile es bringt, darum geht es in diesem Kapi-
tel. In diesem Kapitel lernst du …
$
wie man Funktionen mit Parametern definiert.
$
dass Parameter lokale Variablen der Funktionen sind.
$
wie man beim Aufruf solcher Funktionen Argumente für die Parameter
einsetzt.
$
schließlich, wie du mit dem Aufbau deiner eigenen Werkzeugbibliothek
beginnst.
$
einiges über das Kombinieren von Strings.
134
Funktionen mit Parametern
Kapitel
5
Noch einmal Dreiecke
Wir gehen von einer besonders einfachen Version unseres Dreieckspro-
gramms aus.
>
Lade
dreieck_arbeit.py
aus dem Ordner
C:\py4kids\kap05
in
ein Editor-Fenster. Führe es aus und überlege, wie es funktioniert.
Dort wollen wir dreimal jeweils die zwei Zeilen der
Form
seite = 65
dreieck()
durch einen Aufruf der Form
dreieck(65)
ersetzen. Dazu müssen wir die Definition der
Funktion
dreieck()
abändern. Die Funktion muss
die Information, wie lang die Dreiecksseite sein soll
– als Argument – übernehmen können. Wir errei-
chen das, indem wir einen Variablennamen bereit-
stellen, dem beim Funktionsaufruf das passende
Objekt zugewiesen wird. Ein solcher Variablenname
heißt Parameter der Funktion.
Ich zeige das an einem ganz einfachen Beispiel mit dem IPI:
>
Mach mit!
Definiere
zunächst eine Funktion, die eine Zahl und das Zweifache der Zahl
ausgeben soll:
>>> def zweifach(zahl):
print("Die Zahl ist:", zahl)
print("Das Doppelte ist:", 2 * zahl)
Dann rufe die Funktion auf:
135
Noch einmal Dreiecke
>>> zweifach(3)
Die Zahl ist: 3
Das Doppelte ist: 6
Welchen Wert hat
zahl
jetzt für den IPI?
>>> zahl
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
zahl
NameError: name 'zahl' is not defined
>>>
Aha, ein Namensfehler! Das zeigt uns, dass der Name
zahl
offenbar ein
lokaler Name der Funktion
zweifach()
ist. Außerhalb der Funktion exis-
tiert er nicht.
Du bist jetzt sicher neugierig, ob wir das mit unserer Funktion
dreieck()
genauso machen können. Also probieren wir das rasch mit dem IPI aus,
wobei wir als Namen für die Länge der Dreiecksseite den Buchstaben
a
wählen:
>
Mach weiter mit!
>>> from turtle import *
>>> reset()
>>> pensize(3)
>>> def dreieck(a):
forward(a)
left(120)
forward(a)
left(120)
forward(a)
left(120)
Nun übernimmt die Funktion
dreieck()
beim Aufruf ein Argu-
ment. Probiere das mit drei Auf-
rufen von
dreieck()
aus.
>>> dreieck(40)
>>> dreieck(80)
>>> dreieck(120)
Damit ergibt sich folgendes Bild:
Durch Einfügen der Anweisung
print("a:", a)
in den Code von
drei-
eck()
kannst du sichtbar machen, welchen Wert der Name
a
bei einer
Ausführung von
dreieck()
hat.
136
Funktionen mit Parametern
Kapitel
5
>>> reset()
>>> def dreieck(a):
print("a:", a)
forward(a)
left(120)
forward(a)
left(120)
forward(a)
left(120)
>>> dreieck(40)
a: 40
>>> seite = 60
>>> dreieck(seite)
a: 60
>>> a = 90
>>> dreieck(a)
a: 90
>>> dreieck(2 * seite)
a: 120
>>> a
90
Diese Übung zeigt bemerkenswerte und auch merkenswerte Tatsachen über
Variablen auf:
0
Wir haben in dieser Übung willkürlich als Parameter der Funktion
dreieck()
den Namen
a
verwendet.
0
Beim Funktionsaufruf muss an der Stelle von
a
ein Objekt eingesetzt
werden. Dies kann ein Zahlenwert sein (
40
), ein Name (
seite
) oder ein
Ausdruck (
2*seite
).
0
Der eingesetzte Name kann gleichlautend mit dem Parameternamen
sein. Dennoch sind es zwei verschiedene Namen. Wie die letzte Ermitt-
lung des Werts von
a
zeigt, behält der
globale
Name
a
seinen Wert
90
auch, nachdem der Parameter
a
, eine lokale Variable, den Wert
120
hatte.
0
Im Allgemeinen ist es keine gute Idee, Parameter genauso zu benennen
wie globale Variablen.
0
Es ist auch keine gute Idee, Parameternamen so nichtssagend wie
a
zu
wählen. In einer interaktiven Sitzung geht das gerade noch an, denn
dabei vergisst du wohl kaum die Bedeutung des Parameters. In einem
Programm, das du Tage oder Wochen später wieder verwenden möch-

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required