Routineaufgaben mit Python automatisieren. Al Sweigart
Чтение книги онлайн.

Читать онлайн книгу Routineaufgaben mit Python automatisieren - Al Sweigart страница 40

Название: Routineaufgaben mit Python automatisieren

Автор: Al Sweigart

Издательство: Bookwire

Жанр: Математика

Серия:

isbn: 9783960889571

isbn:

СКАЧАТЬ Sie wissen, bestehen Ausdrücke aus Werten und Operatoren. Da ein Funktionsaufruf zu seinem Rückgabewert ausgewertet wird, kann er daher auch in einem Ausdruck verwendet werden.

       Der Wert None

      In Python gibt es den Wert None, der die Abwesenheit eines Wertes bedeutet. Dies ist der einzige Wert des Datentyps NoneType. (In anderen Programmiersprachen wird er auch als null, nil oder undefined bezeichnet.) Ebenso wie die booleschen Werte True und False muss auch None mit großem Anfangsbuchstaben geschrieben werden.

      Dieser Nicht-Wert ist praktisch, wenn Sie etwas speichern müssen, das nicht mit einem echten Wert in einer Variablen verwechselt werden darf. Eine mögliche Anwendung für None ist der Rückgabewert von print(). Diese Funktion zeigt Text auf dem Bildschirm an, muss im Gegensatz zu len() oder input() aber eigentlich nichts zurückgeben. Da aber alle Funktionsaufrufe zu einem Rückgabewert ausgewertet werden, gibt print() pro forma None zurück. Um sich das anzusehen, geben Sie Folgendes in die interaktive Shell ein:

      >>> spam = print('Hello!')

      Hello!

      >>> None == spam

      True

      Wenn eine Funktionsdefinition keine return-Anweisung hat, hängt Python stillschweigend return None an, ebenso wie eine while- oder for-Schleife implizit mit einer continue-Anweisung endet. Wenn Sie eine return-Anweisung ohne Wert schreiben (also nur das Schlüsselwert return verwenden), wird ebenfalls None zurückgegeben.

       Schlüsselwortargumente und print()

      Die meisten Argumente werden anhand ihrer Position im Funktionsaufruf identifiziert. Beispielsweise ist random.randint(1, 10) etwas anderes als random.randint(10, 1). Die erste Funktion gibt eine Zufallszahl zwischen 1 und 10 zurück, da das erste Argument die Untergrenze und das zweite die Obergrenze des Intervalls darstellt. Dagegen führt random.randint(10, 1) zu einem Fehler.

      Schlüsselwortargumente werden dagegen durch das Schlüsselwort bezeichnet, das ihnen in dem Funktionsaufruf vorangestellt wird. Diese Art von Argumenten wird häufig für optionale Parameter verwendet. Beispielsweise können Sie bei der Funktion print() mit den optionalen Parametern end und sep angeben, was am Ende der Argumente ausgegeben werden soll und was dazwischen (als Trennzeichen).

      Betrachten Sie das folgende Beispielprogramm:

      print('Hello')

      print('World')

      Die Ausgabe sieht wie folgt aus:

      Hello

      World

      Die beiden Strings werden auf getrennten Zeilen ausgegeben, da print() am Ende des übergebenen Strings automatisch einen Zeilenumbruch einfügt. Mit dem Schlüsselwortargument end können Sie dieses Verhalten jedoch ändern. Nehmen wir an, wir haben folgendes Programm:

      print('Hello', end='')

      print('World')

      Hier sieht die Ausgabe wie folgt aus:

      HelloWorld

      Die Ausgabe erscheint auf einer einzigen Zeile, da hinter 'Hello' kein Zeilenumbruch mehr ausgegeben wird, sondern ein leerer String. Das ist nützlich, wenn Sie den automatischen Zeilenumbruch hinter den Funktionsaufrufen von print() aufheben wollen.

      Wenn Sie mehrere Stringwerte an print() übergeben, trennt die Funktion sie automatisch durch ein Leerzeichen. Geben Sie beispielsweise Folgendes in die interaktive Shell ein:

      >>> print('cats', 'dogs', 'mice')

      cats dogs mice

      Das Standardtrennzeichen können Sie mit dem Schlüsselwortargument sep ändern. Probieren Sie in der interaktiven Shell Folgendes aus:

      >>> print('cats', 'dogs', 'mice', sep=',')

      cats,dogs,mice

      Auch zu Ihren selbst geschriebenen Funktionen können Sie Schlüsselwortargumente hinzufügen. Dazu müssen Sie sich jedoch mit den Datentypen für Listen und Wörterbücher (Dictionaries) auskennen, die wir in den nächsten beiden Kapiteln behandeln werden. Merken Sie sich zunächst nur, dass einige Funktionen auch über optionale Schlüsselwortargumente verfügen, die Sie beim Aufruf der Funktion angeben können.

       Der Aufrufstack

      Stellen Sie sich eines dieser Gespräche vor, in denen Sie vom Hundertsten ins Tausendste kommen. Beispielsweise wollen Sie eigentlich über Ihre Freundin Alice sprechen, was Sie an eine Geschichte über Ihren Kollegen Bob erinnert, die Sie aber nicht gleich erzählen können, weil Sie dazu erst einmal etwas über Ihre Cousine Carol berichten müssen. Wenn Sie mit den Hinweisen zu Carol fertig sind, kehren Sie zu der Geschichte über Bob zurück, und danach reden Sie wieder von Alice. Dabei aber werden Sie an Ihren Bruder David erinnert, weshalb Sie eine Bemerkung über ihn einschieben, bevor Sie endlich Ihre Geschichte über Alice abschließen. Ihre Äußerungen folgen dem Muster aus Abb. 3–1, in dem die Gesprächsthemen einen »Stapel« (Stack) bilden und das aktuelle Thema jeweils obenauf liegt.

       Abb. 3–1 Der Stack einer Unterhaltung mit vielen Abschweifungen

      Ebenso führt auch der Aufruf einer Funktion nicht dazu, dass die Ausführung wie eine Reise ohne Wiederkehr zum Anfang der betreffenden Funktion umgeleitet wird. Python merkt sich, in welcher Zeile die Funktion aufgerufen wurde, sodass die Ausführung nach dem Auftreten einer return-Anweisung dort fortgesetzt werden kann. Ruft die ursprüngliche Funktion weitere Funktionen auf, kehrt die Steuerung nach deren Verarbeitung zunächst zu dem Aufruf dieser verschachtelten Funktionen und erst dann zum Aufruf der ursprünglichen Funktion zurück.

      Geben Sie im Dateieditor den folgenden Code ein und speichern Sie ihn als abcdCallstack.py:

      def a():

      print('a() starts')

      b() image

      d() image

      print('a() returns')

      def b():

      print('b() starts')

      c() image

      print('b() returns')

СКАЧАТЬ