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

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

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

Автор: Al Sweigart

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

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

Серия:

isbn: 9783960889571

isbn:

СКАЧАТЬ falschen Wert hat, dann wissen Sie, dass er nur im Code der entsprechenden Funktion zugewiesen worden sein kann.

      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 image

      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 (image). Sobald die Programmausführung spam verlässt, wird dieser lokale Gültigkeitsbereich aber zerstört, weshalb es keine Variable namens eggs mehr gibt. Wenn das Programm versucht, print(eggs) auszuführen, meldet Python, dass eggs nicht definiert ist. Wenn Sie ein wenig darüber nachdenken, ist das auch tatsächlich sinnvoll. Während sich die Programmausführung im globalen Gültigkeitsbereich bewegt, gibt es keine lokalen Gültigkeitsbereiche und damit kann es auch keine lokalen Variablen geben. Aus diesem Grunde lassen sich im globalen Gültigkeitsbereich ausschließlich globale Variablen verwenden.

       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 image

      bacon() image

      print(eggs) image

      def bacon():

      ham = 101

      eggs = 0 image

      spam() image

      Die Ausführung dieses Programms können Sie sich auf https://autbor.com/otherlocalscopes/ ansehen. Zu Beginn wird hier die Funktion spam() aufgerufen (image) und damit ein lokaler Gültigkeitsbereich erstellt. Die lokale Variable eggs (image) wird auf 99 gesetzt. Daraufhin wird die Funktion bacon() aufgerufen (image) 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 (image). 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 (image). 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.

       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' image

      print(eggs) # Gibt 'spam local' aus

      def bacon():

      eggs = 'bacon local' image

      print(eggs) # Gibt 'bacon local' aus

      spam()

      print(eggs) # Gibt 'bacon local' aus

      eggs = 'global' СКАЧАТЬ