At My Fingertips
In dieser Aktivität lernst du, wie du Funktionen in Python definieren kannst, um wiederkehrende Aufgaben zu vereinfachen und gleichzeitig die Idee der Abstraktion zu verstehen.
Erinnerst du dich an Aufgabe 3 aus der vorletzten Aktivität, bei der ihr eine vierblättrige Blüte erstellen solltet? Vielleicht hast du damals auch gedacht, dass es nicht besonders praktisch war, einen Kreis durch den Aufruf der ellipse
Funktion zu erstellen. Das Wort „Ellipse“ in unseren Code zu schreiben, wenn wir eigentlich den Sonderfall eines Kreises meinen, ist nicht so intuitiv. Und den Durchmesser zweimal angeben zu müssen, einmal zur Angabe der Breite und einmal zur Angabe der Höhe, ist ärgerlich!
Wäre es nicht schön, wenn es eine spezielle Funktion gäbe, passenderweise kreis
genannt, die nur einen Durchmesser als Parameter benötigt?
Ha! Immer wenn du denkst: „Wäre es nicht schön, wenn es eine bestimmte Funktion gäbe …“, darfst du dich freuen! Warum? Weil du diesen Wunsch wahr werden lassen kannst! Wie? Mit Python können wir unsere eigenen Funktionen definieren!
Die beiden Zeilen, beginnend mit def
und return
, in der folgenden Codezelle zeigen, wie eine Funktion definiert wird. Ersetze in der Zeile danach _ durch einen Aufruf deiner neu definierten kreis
Funktion, um einen blauen Kreis mit dem Durchmesser 100 zu erstellen.
Das Schlüsselwort def
besagt, dass es sich bei dem, was folgt, um die Definition einer Funktion handelt. Direkt nach diesem Wort gibst du den Namen der Funktion an (wir haben unsere Funktion kreis
genannt). Dann gibst du die Parameter in Klammern an (unsere kreis
Funktion hat zwei Parameter: durchmesser
und farbe
). Die Zeile, die mit einem Doppelpunkt endet, wird als Funktionskopf bezeichnet. Unterhalb des Funktionskopfes schreibst du den Körper der Funktion.
Der Körper besteht aus einer oder mehreren Zeilen, wobei jede Zeile eine Anweisung enthält. In unserem Beispiel besteht der Körper aus einer einzelnen Zeile, einer return
-Anweisung. Diese return
-Anweisung bewirkt, dass der Wert des Ausdrucks hinter return
zurückgegeben wird (engl. return).
Beachte:
Wenn eine return
-Anweisung in einer Funktion ausgeführt wird, wird die Funktion beendet und der resultierende Wert wird an die Stelle zurückgegeben, von der aus die Funktion aufgerufen wurde (bei uns an kreis(100, blau)
).
Wo endet der Körper? Gute Frage! Hast du bemerkt, dass der Körper der Funktion eingerückt ist? Dies geschieht in Python automatisch, wenn du nach dem Doppelpunkt am Ende des Funktionskopfes auf Enter drückst. Die Entwicklungsumgebung fügt dann automatisch eine Einrückung hinzu, meistens vier Leerzeichen. Die Einrückung ist sehr wichtig, denn der Funktionskörper wird so lange als zusammenhängend betrachtet, wie die Einrückung beibehalten wird. Endet die Einrückung, gehört die darauffolgende Zeile nicht mehr zum Körper der Funktion. In der oben gezeigten Codezelle ist daher die Zeile blauer_kreis = kreis(100, blau)
nicht mehr Teil des Körpers, da sie nicht eingerückt ist.
Was macht der Körper? Immer wenn die Funktion aufgerufen wird, wird der Körper ausgeführt. Der Körper der kreis
Funktion ruft ellipse
auf, um eine Kreisgrafik zu erzeugen, und gibt dann diese Kreisgrafik zurück.
Unsere Codezelle macht also vier Dinge:
ellipse
, blau
und zeige_grafik
.kreis
, sodass bei jedem Aufruf eine kreisförmige Ellipse mit dem angegebenen Durchmesser und der angegebenen Farbe erstellt wird.kreis
auf, die eine Grafik erstellt und zurückgibt, und weist dieser Grafik den Namen blauer_kreis
zu.blauer_kreis
an.Übrigens, ist dir aufgefallen, dass in der Codezelle rechts unten das folgende Symbol angezeigt wird?
Dabei handelt es sich um das Symbol der Toolbox. Klicke darauf und du kannst deine Funktion in der Toolbox abspeichern. Damit schlägst du zwei Fliegen mit einer Klappe:
from toolbox import kreis
(wobei kreis
hier als Beispiel für eine selbst definierte Funktion steht und entsprechend durch andere Funktionsnamen ersetzt werden kann).Sobald du Funktionen in der Toolbox gespeichert hast, sind diese auf der linken Seite dieses Textes sichtbar.
Einer der Hauptgründe, Funktionen zu verwenden, besteht darin, Code zu abstrahieren und zu modularisieren. Dies bedeutet, dass wir komplexe Aufgaben in kleinere, besser verständliche Teile aufteilen können. Du kannst z.B. deine kreis
Funktion dazu nutzen, andere Kreise zu zeichnen.
Erstelle und zeige in der folgenden Codezelle einen grünen Kreis mit einem Durchmesser von 150 und zeige ihn an. Importiere zunächst die Definition des Namens gruen
und ersetze dann das _ durch den entsprechenden kreis
Aufruf.
Hier hast du die kreis
Funktion erneut verwendet, um statt einen blauen einen grünen Kreis zu erstellen, indem du die gewünschte Grösse und Farbe angegeben hast. Damit hast du Code wiederverwendet und das Prinzip der Abstraktion in der Praxis angewendet.
Erinnerst du dich an die "Gestreifte Wassermelone"-Aufgabe aus der letzten Aktivität? Genau, die letzte Codezelle enthielt einen sehr komplexen, verschachtelten Ausdruck. Hier ist diese Codezelle nochmals:
Du definierst mit def
die Funktion gestreifte_wassermelone
, mit den Parametern breite
und hoehe
.
Dies hat zwei Vorteile:
breite
und hoehe
selbst wählen.Daraus folgt, dass der Funktionskörper zwar den komplexen Ausdruck enthält, aber in leicht abgeänderter Form.
Richtig! Die Zahlen (also die Literalwerte)! Sie müssen weg bzw. durch die Parameter ersetzt werden.
Merke dir:
Wann immer du einen Ausdruck schreibst, der Literalwerte enthält (z.B. 90
), solltest du erwägen, den Ausdruck in eine Funktion mit Parametern zu abstrahieren. Der Ausdruck wird zum Körper der Funktion und anstelle der Literalwerte werden Parameter verwendet, sodass die Funktion mit beliebigen Werten aufgerufen werden kann.
Unten siehst du die Funktion, die gestreifte Wassermelonen mit variabler Breite und Höhe erstellt, aber sie ist noch unvollständig. Vervollständige sie, indem du die ... durch die entsprechenden Zahlen ersetzt.
In dieser Aktivität hast du wichtige Grundlagen der Programmierung in Python erworben:
Du hast das Erstellen von Kreisen geübt, was deine erste Begegnung mit einer grundlegenden Idee in der Programmierung war: Das Erstellen eigener Funktionen (mit def
).
Das Definieren einer Funktion ist eine Form der Abstraktion. Es ermöglicht dir, einem Codeteil (dem "Körper" der Funktion) einen Namen zu geben und diesen Namen immer wieder zu verwenden, um denselben Code auszuführen. Funktionen können Parameter (wie durchmesser
) haben. Du kannst dieselbe Funktion viele Male aufrufen und dabei unterschiedliche Werte an ihre Parameter übergeben.
Du hast die Idee der Abstraktion vertieft und gelernt, wie du komplexe Aufgaben in kleinere, leichter verständliche Teile zerlegen kannst. Ein konkretes Beispiel hierfür war die Funktion gestreifte_wassermelone
. Durch die Verwendung von Parametern kannst du einfach unterschiedliche Wassermelonen erzeugen, ohne den komplexen Code jedes Mal neu schreiben zu müssen. Abstraktion in diesem Sinne ermöglicht es dir, selbst komplizierte Probleme klar und effizient zu lösen.
Mit der Zeit wirst du viele, viele Funktionen definieren. Das Definieren neuer Funktionen wird zu einer deiner häufigsten Aktivitäten als Programmierer*in!
This activity has been created by Lichtsteiner and is licensed under CC BY-SA 4.0.
It is derived from this activity and this activity.
Funktionen und Abstraktion
PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI
Privacy Policy • Platform Version b744b47 (Tue, 08 Oct 2024 16:30:14 GMT)