At My Fingertips

Documentation

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.

Funktionen definieren

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.

Loading...

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.

Definition einer 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:

  1. Sie importiert die Namen ellipse, blau und zeige_grafik.
  2. Sie definiert die Funktion kreis, sodass bei jedem Aufruf eine kreisförmige Ellipse mit dem angegebenen Durchmesser und der angegebenen Farbe erstellt wird.
  3. Sie ruft die Funktion kreis auf, die eine Grafik erstellt und zurückgibt, und weist dieser Grafik den Namen blauer_kreis zu.
  4. Sie zeigt die Grafik mit dem Namen blauer_kreis an.

Übrigens, ist dir aufgefallen, dass in der Codezelle rechts unten das folgende Symbol angezeigt wird?

Toolbox-Symbol

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:

  • Du kannst Code, sauber in Funktionen abgepackt, ganz einfach wiederverwenden - und zwar nicht nur in dieser Aktivität, sondern auch in anderen Aktivitäten! Letzteres geht mithilfe der Zeile from toolbox import kreis (wobei kreis hier als Beispiel für eine selbst definierte Funktion steht und entsprechend durch andere Funktionsnamen ersetzt werden kann).
  • Du vermeidest COPY/PASTE-Aktionen und befolgst somit das Prinzip DRY (Don’t repeat yourself, englisch für „wiederhole dich nicht“).

Sobald du Funktionen in der Toolbox gespeichert hast, sind diese auf der linken Seite dieses Textes sichtbar.

Abstraktion und Wiederverwendung

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.

Loading...

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.

Komplexere Abstraktion

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:

Loading...

Du definierst mit def die Funktion gestreifte_wassermelone, mit den Parametern breite und hoehe. Dies hat zwei Vorteile:

  • Du kannst die Werte von breite und hoehe selbst wählen.
  • Du schreibst den Ausdruck nur einmal und kannst damit dennoch verschiedene Wassermelonen zeichnen.

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.

Loading...

Was du gelernt hast

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

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version c08406b (Wed, 20 Nov 2024 12:30:00 GMT)