Funktionen mit Parametern

Einführung

Wenn wir unseren Code minimieren und Funktionen hinzufügen um Wiederholungen zu entfernen faktorisieren wir ihn. Das ist eine gute Sache. Aber die Funktionen die wir bis jetzt definiert haben sind nicht sehr flexibel. Die Variablen sind innerhalb der Funktionen definiert, falls wir also einen anderen Winkel oder Distanz benutzen wollen müssen wir eine neue Funktion schreiben. Unsere hexagon-Funktion kann nur Hexagone einer Größe zeichnen!

Deshalb benötigen wir die Möglichkeit Parameter, auch Argumente genannt, an eine Funktion zu übergeben. So können die Variablen innerhalb der Funktion jedes Mal wenn die Funktion aufgerufen wird, andere Werte annehmen:

Erinnere Dich wie wir die Funktion line_without_moving() im vorigen Abschnitt definiert haben:

def line_without_moving():
    turtle.forward(50)
    turtle.backward(50)

Wir können die Funktion verbessern, indem wir ihr einen Parameter übergeben:

def line_without_moving(length):
    turtle.forward(length)
    turtle.backward(length)

Der Parameter fungiert als Variable die nur innerhalb der Funktionsdefinition bekannt ist. Wir verwenden diese neu definierte Funktion, indem wir sie mit dem Wert für den Parameter aufrufen:

line_without_moving(50)
line_without_moving(40)

Wir haben bereits seit dem Anfang des Tutorials Funktionen mit Parametern verwendet, z.B. turtle.forward(), turtle.left(), etc...

Wir können so viele Argumente (oder Parameter) wie wir möchten für eine Funktio definieren. Die einzelnen Argumente sind dabei durch Kommata getrennt und haben alle unterschiedliche Namen:

def tilted_line_without_moving(length, angle):
    turtle.left(angle)
    turtle.forward(length)
    turtle.backward(length)

Eine parametrisierte Funktion für ein Hexagon mit variabler Grösse

Übung

Schreibe eine Funktion die Dir jedes Mal wenn Du die Funktion aufrufsts, erlaubt Hexagone mit beliebiger Grösse zu zeichnen.

Lösung

def hexagon(size):
    for _ in range(6):
        turtle.forward(size)
        turtle.left(60)

Eine Funktion mit mehreren Parametern

Übung

Schreib eine Funktion die eine Form mit irgendeiner Anzahl von Seiten (lass uns annehmen mehr als zwei) von irgendeiner Seitenlänge zeichnet. Lass sie ein paar verschiedene Formen malen.

Hier ist ein Beispiel wie man Formen mit dieser Funktion malt:

_images/shapes.png

Tipp

Die Summe der Außenwinkel in jeder Form ist immer 360 Grad!

Lösung

def draw_shape(sides, length):
    for _ in range(sides):
        turtle.forward(length)
        turtle.right(360 / sides)

Bonus

Es mag verrückt klingen, aber es ist durchaus möglich eine Funktion als Parameter einer anderen Funktion zu übergeben. Python betrachten Funktionen als total normale ‘Dinge’, genauso wie Variablen, Nummern oder Zeichenketten (Strings).

Man könnte zum Beispiel eine Funktion zum Zeichnen von Formen schreiben die, abhängig von der turtle-Funktion (turtle.left oder ``turtle.right) die man ihr übergibt, die Zeichenrichtung ändert.

Schau ob du das implementieren kannst!

Bemerkung

Eine Funktion (bspw. turtle.left) zu übergeben heißt nicht sie aufzurufen, was man als turtle.left(45) schreiben würde.