Python Online | ||
Home . |
DU LERNST HIER... |
wie du Funktionen mit Parametern definieren kannst. Du kennst Parameter bereits von vielen Turtlebefehlen. Beim Befehl forward(s) darfst du für s verschiedene Zahlen einsetzen. Mit forward(100) bewegt sich Turtle 100 Schritte vorwärts. Der Befehl forward(s) hat einen Paramter s. Auch selbst definierte Funktionen können Parameter haben. |
MUSTERBEISPIELE |
Im Kapitel 5 hast du eine Funktion square() definiert, die ein Quadrat mit fixer Seitenlänge 100 zeichnet. Man sagt anschaulich, dass die Seitenlänge 100 im Programm "fest verdrahtet" sei.
Programm: from gturtle import * def square(s): repeat 4: forward(s) left(90) makeTurtle() setPenColor("red") square(80) left(180) setPenColor("green") square(50)
Programm: from gturtle import * def polygon(n, c): w = 360 / n setPenColor(c) repeat n: forward(100) left(w) makeTurtle() setPos(-50, -200) setPenWidth(3) right(90) polygon(3, "red") polygon(4, "green") polygon(5, "blue") polygon(6, "magenta") polygon(8, "cyan") polygon(10, "black") |
MERKE DIR... |
Wenn du die Funktion square(s) mit den Parametern 100 aufrufst, erhält die Variable s in der Funktion square(s) Wert 100. Die Parametrisierung von Funktionen ist wichtig, denn dadurch kannst du die Funktionen flexibler verwenden. Mit der Funktion setPos(x, y) kannst du die Turtle an eine beliebige Position im Turtlefenster versetzen. |
ZUM SELBST LÖSEN |
|
![]() |
![]() |
![]() |
Die Parametrisierung von Funktionen ist für das modulare Programmierer von grosser Wichtigkeit, denn damit erhalten die Funktionen erst die Flexibilität, sich "anpasst" zu verhalten. Neben der Parameterübergabe gibt es auch noch die Möglichkeit, dass Funktionen globale Variablen verwenden, um ihr Verhalten anzupassen. Wegen möglichen Seiteneffekten ist aber die Verwendung von Parameter fast immer vorzuziehen.
In anderen Programmiersprachen spricht man davon, dass der Wert von side in den Parameter s kopiert wird, der dann wie eine gewöhnliche Variable verwendet werden kann (Begriff Werteparameter). In Python ist s lediglich ein Alias von side, d.h. beide verweisen auf den gleichen Wert (entspricht der Übergabe der Adresse, also dem Begriff Variablenparameter).
Für Zahlen und andere unveränderliche Datentypen spielt dieser Unterschied keine Rolle, für andere Datentypen wie Listen, usw. ist er aber von grosser Wichtigkeit, weil die Funktion lesenden und schreibenden Zugriff auf die Attribute hat.
Folgendes Beispiel macht dies deutlich:
def foo(x): print "x = ", x, "id:", id(x) a = 2 print "a = ", a, "id:", id(a) foo(a)
Es wird zweimal der gleiche Wert und die gleiche Adresse ausgeschrieben.
Es wäre in Python auch möglich, auf den Wert von side in der Funktion zu lesen, ohne einen Parameter zu verwenden. Das folgende Programm ist entspricht aber einem schlechten Programmierstil. (Um side in der Funktion zu verändern, müsste sie als global bezeichnet werden.)
from gturtle import * def square(): repeat 4: forward(side) right(90) makeTurtle() hideTurtle() setPos(-200, -200) side = 10 repeat 100: square() side += 4
Da Parameternamen nur in der dazugehörenden Funktion definiert (sichtbar) sind, gibt es keinen Konflikt mit gleich lautenden Programmvariablen. Folgendes Programm ist also korrekt und zur Verbesserung der Lesbarkeit sogar üblich:
from gturtle import * def square(side): repeat 4: forward(side) right(90) makeTurtle() hideTurtle() setPos(-200, -200) side = 10 repeat 100: square(side) side += 4