Routineaufgaben mit Python automatisieren. Al Sweigart

Читать онлайн книгу.

Routineaufgaben mit Python automatisieren - Al Sweigart


Скачать книгу
ausgeführt, sondern erst, wenn die Funktion aufgerufen wird.

      Die hello()-Zeilen im Anschluss an die Funktionsdefinition (image) sind Funktionsaufrufe. Im Code wird ein solcher Aufruf in Form des Funktionsnamens gefolgt von den Klammern geschrieben, wobei in den Klammern Zahlen als Argumente stehen können. Wenn die Programmausführung diese Aufrufe erreicht, springt sie zur ersten Zeile in der Funktion und führt den dort vorhandenen Code aus. Am Ende der Funktion angelangt, kehrt die Ausführung wieder zu der Zeile zurück, in der die Funktion aufgerufen wurde. Der Code wird dann wie gehabt weiter abgearbeitet.

      Da das Programm die Funktion hello() dreimal aufruft, wird der Code von hello() auch dreimal ausgeführt. Wenn Sie das Programm starten, sehen Sie folgende Ausgabe:

      Howdy!

      Howdy!!!

      Hello there.

      Howdy!

      Howdy!!!

      Hello there.

      Howdy!

      Howdy!!!

      Hello there.

      Ein wichtiger Zweck von Funktionen besteht darin, Code, der mehrfach ausgeführt wird, an einer Stelle zentral vorzuhalten. Ohne Funktionen müssten Sie den Code überall dort, wo er benötigt wird, komplett einfügen. Das Programm sähe dann wie folgt aus:

      print('Howdy!')

      print('Howdy!!!')

      print('Hello there.')

      print('Howdy!')

      print('Howdy!!!')

      print('Hello there.')

      print('Howdy!')

      print('Howdy!!!')

      print('Hello there.')

      Eine solche Duplizierung von Code sollten Sie in jedem Fall vermeiden, denn wenn Sie Ihren Code irgendwann ändern – zum Beispiel, um einen Fehler zu korrigieren –, müssten Sie ihn sonst an jeder einzelnen Stelle anpassen, an der Sie ihn eingefügt haben.

      Je mehr Programmiererfahrung Sie haben, umso häufiger werden Sie duplizierten oder kopierten Code entfernen können. Dadurch werden Ihre Programme kürzer, besser lesbar und leichter zu ändern.

       Def-Anweisungen mit Parametern

      Beim Aufruf von Funktionen wie print() und len() übergeben Sie Werte, sogenannte Argumente, indem Sie sie in die Klammern schreiben. Auch Ihre eigenen Funktionen können Sie so definieren, dass sie Argumente annehmen. Geben Sie das folgende Beispiel im Dateieditor ein und speichern Sie es als helloFunc2.py:

      def hello(name): image

      print('Hello ' + name) image

      hello('Alice') image

      hello('Bob')

      Wenn Sie dieses Programm ausführen, erhalten Sie folgende Ausgabe:

      Hello Alice

      Hello Bob

      Die Ausführung dieses Programms können Sie sich auf https://autbor.com/hellofunc2/ ansehen. Die Definition der Funktion hello() in diesem Programm schließt den Parameter name ein (image). Ein Parameter ist eine Variable, die Argumente enthält. Wird eine Funktion mit Argumenten aufgerufen, so werden diese Argumente in den Parametern gespeichert. Beim ersten Mal wird die Funktion hello() mit dem Argument 'Alice' aufgerufen (image). Die Programmausführung fährt mit der Funktion fort, wobei die Variable name automatisch auf 'Alice' gesetzt wird. Dieser Text wird in die Ausgabe der Anweisung print() aufgenommen (image).

      Sobald die Funktion die Steuerung zurückgibt (wenn die Programmausführung also die Funktion verlässt und normal fortfährt), geht der in dem Parameter gespeicherte Wert jedoch verloren. Wenn Sie in dem vorstehenden Programm hinter hello('Bob') die Anweisung print(name) einfügen, erhalten Sie die Fehlermeldung NameError, da es zu diesem Zeitpunkt keine Variable namens name mehr gibt – sie ist nach dem Abschluss des Funktionsaufrufs hello('Bob') zerstört worden.

      Das ähnelt dem Prinzip, dass auch die Variablen im Programm nach Beendigung des Programms vergessen werden. Weiter hinten in diesem Kapitel werde ich im Zusammenhang mit dem lokalen Gültigkeitsbereich von Funktionen noch ausführlicher darauf eingehen.

       Terminologie

      Die Begriffe definieren, aufrufen, übergeben, Argument und Parameter haben genau festgelegte Bedeutungen. Sehen wir uns das anhand eines Codebeispiels an:

      def sayHello(name): image

      print('Hello, ' + name)

      sayHello('Al') image

      Eine Funktion zu definieren bedeutet, sie zu erstellen – auf ähnliche Weise, wie Sie mit einer Zuweisung wie spam = 42 die Variable spam anlegen. Mit der def-Anweisung bei image wird die Funktion sayHello() definiert. In der Zeile sayHello('Al') (image) wird diese Funktion aufgerufen, wobei die Ausführung an den Anfang des Funktionscodes springt. Dieser Funktionsaufruf übergibt außerdem den Stringwert 'Al' an die Funktion. Ein solcher in einem Funktionsaufruf übergebener Wert ist ein Argument. Hier wird das Argument 'Al' der lokalen Variablen name zugewiesen. Variablen, denen Argumente zugewiesen werden, heißen Parameter.

      Man kann diese Begriffe leicht verwechseln, es ist aber wichtig, dass Sie den Überblick behalten, denn dadurch ist sichergestellt, dass Sie die Bedeutung des Textes in diesem Kapitel verstehen.

       Rückgabewerte und die Anweisung return

      Wenn Sie die Funktion len() aufrufen und ihr ein Argument wie 'Hello' übergeben, wird der Funktionsaufruf zur Länge des übergebenen Strings ausgewertet, hier also zu dem Integerwert 5. Der Wert, zu dem ein Funktionsaufruf ausgewertet wird, ist der sogenannte Rückgabewert der Funktion.

      Wenn Sie mit def eine eigene Funktion erstellen, können Sie mithilfe der Anweisung return festlegen, was der Rückgabewert sein soll. Eine return-Anweisung weist folgende Bestandteile auf:

       Das Schlüsselwort return

       Den Wert oder Ausdruck, den die Funktion zurückgeben soll

      Wenn Sie in der return-Anweisung einen Ausdruck angeben, ist der Rückgabewert der Wert, zu dem dieser Ausdruck ausgewertet wird. Betrachten Sie als Beispiel das folgende Programm, das je nachdem, welche Zahl als Argument übergeben wird, einen anderen String zurückgibt. Geben Sie den folgenden Code in den Dateieditor ein und speichern Sie ihn als magic8Ball.py:

      import random Скачать книгу