Название: Routineaufgaben mit Python automatisieren
Автор: Al Sweigart
Издательство: Bookwire
Жанр: Математика
isbn: 9783960889571
isbn:
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()
d()
print('a() returns')
def b():
print('b() starts')
c()
print('b() returns')
СКАЧАТЬ