Python Online
Home    .  
parameter

7. PARAMETER

 

 

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.

Die Funktion kann viel flexibler eingesetzt werden, wenn du die Seitenlänge beim Funktionsaufruf angeben kannst, also z.B. square(50) oder square(70) schreiben kannst. Dazu musst du die Funktionsdefinition von square(s) mit einem Parameter versehen, dessen Name du in die Parameterklammer schreibst. Den Parameter kannst du im Innern der Funktion (im Funktionskörper) wie eine gewöhnliche Variable verwenden. Im Programm zeichnet die Turtle zwei Quadrate mit den Seitenlängen 80 und 50.

 



Programm:
from gturtle import *

def square(s):    
     repeat 4: 
        forward(s) 
        left(90)
      
makeTurtle()
setPenColor("red")
square(80)
left(180)
setPenColor("green")
square(50)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Eine Funktion kann auch mehrere Parameter haben.. In deinem Beispiel hat die Funktion square(s, c) zwei Parameter: s für die Seitenlänge und c für die Füllfarbe. Beim Aufruf der Funktion mit square(120, "yellow") erhält s den Wert 120 und c den Wert "yellow".

 

Programm:
from gturtle import *

def square(s, c):
    setPenColor(c)
    setFillColor(c)
    startPath()
    repeat 4: 
        forward(s) 
        left(90)
    fillPath()    
      
makeTurtle()
square(120, "yellow")
square(90, "red")
square(60, "green")
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

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.

 

 

 

ZUM SELBST LÖSEN

 
1.

Das nebenstehende Bild entsteht, indem die Länge der Quadratseite ausgehend von 180 bei jedem nachfolgenden Quadrat mit dem Faktor 0.95 verkleinert wird. Es werden 100 Quadrate gezeichnet. Schreibe das Programm mit der Funktion square(s)

 


2.

Definiere eine Funktion, dreieck(c), welche ein gefülltes Dreieck mit der gegebenen Farbe zeichnet. Erstelle damit das nebenstehende Bild.


 



3.

Definiere eine Funktion circle(s, c), mit dem die Turtle gefüllte Kreise mit gegebener Füllfarbe zeichnet und erstelle damit die nebenstehende Zeichnung. Du hast bereits im Kapitel Figuren füllen gelernt, dass man einen Kreis als ein Vieleck zeichnen kann.

repeat 120:
    forward(3)
    right(3) 
 

4.

Du definiert eine Funktion circle(s), die einen Kreis zeichnet. Die nebenstehende Figur entsteht, indem du 30 Kreise zeichnest, s nach jedem gezeichneten Kreis verkleinerst (s = s *0.9) und die Turtle 5 Schritte vorwärts bewegst.

 

 

 

   

 

   

 

7-1
Fachliche Hinweise:

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.

7-2
Fachliche Hinweise:

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