Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 93
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 () und damit ein lokaler Gültigkeitsbereich erstellt. Die lokale Variable eggs () wird auf 99 gesetzt. Daraufhin wird die Funktion bacon() aufgerufen () und ein zweiter lokaler Gültigkeitsbereich erstellt. Mehrere lokale Gültigkeitsbereiche können zur selben Zeit existieren. In diesem neuen lokalen Gültigkeitsbereich wird die lokale Variable ham auf 101 gesetzt. Außerdem wird eine lokale Variable namens eggs erstellt und auf 0 gesetzt (). Allerdings ist dies eine andere Variable als die im lokalen Gültigkeitsbereich von spam().
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 (). Der lokale Gültigkeitsbereich für den Aufruf von spam() existiert immer noch. Die einzige Variable namens eggs, die es jetzt noch gibt, ist diejenige der Funktion spam(), die auf 99 gesetzt wurde. Das ist der Wert, den das Programm ausgibt.
Was lernen wir daraus? Lokale Variablen in einer Funktion sind komplett von den lokalen Variablen in einer anderen Funktion getrennt.