At My Fingertips
Rapid Playground
Bisher haben wir Code verfasst, den wir, einmal geschrieben, nur noch auf mühsame und fehleranfällige Weise wiederverwenden konnten. Die Wiederverwendung von Code ist aber etwas, das Programmierer*innen immer und immer wieder machen. Wir sind eigentlich Profi-Copy-Paster. Und wir als Profi-Copy-Paster haben deshalb auch effizientere Möglichkeiten entwickelt, Code wiederzuverwenden.
Eine Möglichkeit dazu sind Funktionen. Sie kennen Funktionen bereits: show_graphic(rectangle(100, 200, red))
besteht gleich aus zwei Funktionsaufrufen: show_graphic(...)
und rectangle(...)
. Die Funktionsdefinition, also der Code, der beschreibt, was passieren soll, wenn man diese Funktionen aufruft, haben wir noch nicht betrachtet. Wir können aber selbst einmal eine solche Funktionsdefnition verfassen.
In dieser Codezelle (unten) sehen Sie eine Funktionsdefinition, die eine spezielle Ellipse definiert, den Kreis.
Führen Sie diese Codezelle aus.
Wie Sie sehen, passiert noch nichts. Der Compiler hat sich den Code unter dem Namen circle
nur gemerkt, aber noch nicht ausgeführt, da er noch nicht aufgerufen wurde.
Wenn Sie die nächste Codezelle aufrufen, wird der Code in der obigen Zelle mit den Argumenten 200
und rgb_color(0, 127, 255)
aufgerufen und ausgeführt.
Wie schon gesagt können wir einmal definierten Code wiederverwenden. Auf dieser Website geht das, indem wir Funktionen in die Toolbox speichern (davon später mehr) oder indem wir auf der gleichen Webseite Code (weiter unten) wieder verwenden.
Die Folgende Codezelle definiert eine neue Funktion, die eine Zielscheibe erstellt und dazu auf die Funktion circle(...)
zurückgreift:
Eine Funktion besteht immer aus zwei Teilen: der Definition und dem Aufrufer:
Eine Definition darf bestehen, ohne je aufgerufen zu werden, das ist jedoch recht sinnlos und gute Programmierumgebungen weisen darauf hin. Der Code kann aber kompilieren (durchlaufen werden), ohne dass es zu Fehlermeldungen kommt.
Wenn jedoch eine Funktion aufgerufen wird, ohne dass sie definiert wurde, gibt der Compiler sofort eine Fehlermeldung aus.
Die Schlüsselwörter lassen den Compiler wissen, dass einerseits eine Funktionsdefinition jetzt beginnt (def), und andererseits, dass sie jetzt endet (return) und den Rückgabewert zurückgibt.
Nach dem Schlüsselwort def folgt immer der Definitionsname, der aus den gleichen Zeichen bestehen darf wie Variablennamen.
In den Klammern darauf kommt irgendeine Anzahl von Parametern. Das Klammerpaar darf also leer sein oder eine unendliche grosse Anzahl Parameter beinhalten. Für uns werden es meist 0-4 Parameter sein.
Am Schluss muss der Doppelpunkt : folgen. Er signalisiert das Ende des Definitionskopfes (erste Zeile). Alles, was zur Definition gehört, ist (um 4 Leerzeichen) eingerückt. Sobald die Einrückung kleiner ist, zählt es nicht mehr dazu (in Python). Eine Funktion darf auch ohne die return-Zeile enden, im Moment arbeiten wir aber nur mit Funktionen, die mit return enden.
Beide Funktionen in der obigen Darstellung sind übrigens gleichwertig, die zweite Version ist einfach kürzer.
Die Funktion kann eingeteilt werden in Kopf und Körper. Wenn die letzte Zeile return enthält, ist sie die Rückgabeanweisung.
Die Anzahl der Parameter muss beim Aufrufer und der Definition übereinstimmen. Sonst kommt es zu Fehlermeldungen. Führen Sie dazu folgende Codezellen aus.
Korrigieren Sie den Code in folgenden zwei Zellen:
Nicht nur Anzahl der Paramter soll stimmen, sondern auch der Datentyp, sonst kann die Funktion die darin definierten Befehle nicht fehlerfrei ausführen:
Um dies zu verhindern, wird oft noch der Datentyp im Funktionskopf festgelegt. So können Fehler früher erkannt und mit besseren Fehlerbeschrieben gemeldet werden.
Führen Sie dazu folgende Codezellen aus:
Korrigieren Sie den Code in folgender Zelle.
This activity has been created by Gall and is licensed under CC BY-SA 4.0.
Functions: circle
PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI
Privacy Policy • Platform Version b957a28 (Fri, 06 Sep 2024 08:10:08 GMT)