Название: Routineaufgaben mit Python automatisieren
Автор: Al Sweigart
Издательство: Bookwire
Жанр: Математика
isbn: 9783960889571
isbn:
In kurzen Programmen ist die Verwendung globaler Variablen kein Problem, doch bei längeren Programmen sollten Sie sich lieber nicht darauf stützen.
Lokale Variablen können im globalen Gültigkeitsbereich nicht verwendet werden
Wenn Sie das folgende Programm ausführen, erhalten Sie eine Fehlermeldung:
def spam():
eggs = 31337
spam()
print(eggs)
Die Ausgabe lautet wie folgt:
Traceback (most recent call last):
File "C:/test1.py", line 4, in <module>
print(eggs)
NameError: name 'eggs' is not defined
Das liegt daran, dass die Variable eggs nur in dem lokalen Gültigkeitsbereich existiert, der beim Aufruf von spam() erstellt wird (
Lokale Gültigkeitsbereiche können keine Variablen aus anderen lokalen Gültigkeitsbereichen verwenden
Beim Aufruf einer Funktion wird ein neuer lokaler Gültigkeitsbereich erstellt. Das gilt auch dann, wenn die Funktion aus einer anderen Funktion heraus aufgerufen wird. Betrachten Sie dazu das folgende Programm:
def spam():
eggs = 99
bacon()
print(eggs)
def bacon():
ham = 101
eggs = 0
spam()
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/otherlocalscopes/ ansehen. Zu Beginn wird hier die Funktion spam() aufgerufen (
Wenn bacon() die Steuerung zurückgibt, wird der lokale Gültigkeitsbereich für diesen Aufruf und damit auch die Variable eggs zerstört. Die Programmausführung fährt mit der Funktion spam() fort, um den Wert von eggs auszugeben (
Was lernen wir daraus? Lokale Variablen in einer Funktion sind komplett von den lokalen Variablen in einer anderen Funktion getrennt.
Globale Variablen können von einem lokalen Gültigkeitsbereich aus gelesen werden
Betrachten Sie das folgende Programm:
def spam():
print(eggs)
eggs = 42
spam()
print(eggs)
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/readglobal/ ansehen. Da es in der Funktion spam() keinen Parameter namens eggs und auch keinen Code gibt, der eggs bei der Verwendung in spam() einen Wert zuweist, geht Python davon aus, dass hier auf die globale Variable eggs verwiesen wird. Daher gibt das vorstehende Programm den Wert 42 aus.
Lokale und globale Variablen mit demselben Namen
In Python ist es zwar technisch möglich, denselben Namen für eine globale und eine lokale Variable und für lokale Variablen in verschiedenen Gültigkeitsbereichen zu verwenden, doch um sich das Leben zu erleichtern, sollten Sie so etwas tunlichst vermeiden. Um zu sehen, was in einem solchen Fall geschieht, geben Sie folgenden Code in den Dateieditor ein und speichern ihn als localGlobalSameName.py:
def spam():
eggs = 'spam local'
print(eggs) # Gibt 'spam local' aus
def bacon():
eggs = 'bacon local'
print(eggs) # Gibt 'bacon local' aus
spam()
print(eggs) # Gibt 'bacon local' aus
eggs = 'global'