i

Globale und lokale Variablen

Lokal und global

Wird im Hauptprogramm eines Python-Programms eine Variable eingeführt und mit einem Wert belegt, so kann auch in jeder selbst definierten Routine auf diesen Wert zugegriffen werden. Deshalb spricht man von einer globalen Variable.

Im gezeigten Programm ist zahl eine globale Variable. Wird hingegen eine Variable nur in einer Routine mit einem Wert belegt, so kann auch nur innerhalb dieser Routine auf diese Variable zugegriffen werden. Man spricht hier von einer lokalen Variable (lat. locus: der Ort). Die Variable andere_zahl ist eine solche lokale Variable. Wenn man versucht, aus dem Hauptprogramm auf eine lokale Variable zuzugreifen, erscheint eine Fehlermeldung. Man sagt: Globale Variablen gelten überall, lokale Variablen gelten nur in den Routinen, in denen sie zum ersten Mal verwendet wurden.

Aufgabe 1: Gültigkeitsbereich von Variablen

Entferne im obigen Programm das Kommentarzeichen vor der letzten Zeile und starte das Programm erneut. Beschreibe in Worten, weshalb es eine Fehlermeldung gibt.

Zuweisen von Werten auf globale Variablen

Der Zugriff auf globale Variablen innerhalb von Routinen gilt jedoch nicht für das Verändern von Variablenwerten. Denn das könnte ein ziemlich gemeines Problem verursachen, wie das folgende Gedankenexperiment zeigt.

Angenommen, Yasmin hat eine sehr nützliche Routine geschrieben und Franz will diese für sein eigenes Programm benutzen. Yasmin verwendet in ihrer Routine eine Variable mit dem Namen zahl. Innerhalb ihrer Routine wird der Wert von zahl geändert. Franz hingegen hat in seinem Hauptprogramm ebenfalls eine Variable mit dem Namen zahl.

Wenn Franz nun Yasmins Code in sein Programm kopieren und Yasmins Funktion aufrufen würde, dann würde Yasmins Routine den Wert von zahl im Hauptprogramm von Franz ändern. Das Programm von Franz würde dann plötzlich nicht mehr richtig laufen und er müsste mühsam herausfinden, warum das Ausführen von Yasmins Routine sein Programm aus dem Konzept bringt. Mit anderen Worten: Wenn Franz eine Routine von Yasmin benutzen wollte, müsste er jedesmal schauen, ob es keine Dopplung von Variablennamen gibt. Gerade bei langen Routinen wäre das extrem lästig.

Deshalb hat Python hier eine Sicherheitsmaßnahme eingebaut: Routinen dürfen den Wert globaler Variablen zwar benutzen, aber normalerweise nicht ändern.

Was aber passiert, wenn es eine Routine dennoch versucht? In diesem Fall wird eine Kopie der Variable angelegt. Das heißt: Es gibt jetzt zwei Variablen mit dem Namen zahl, die unterschiedliche Werte haben können. Innerhalb der Routine wird die neu erstellte Kopie verwendet, aber auch nur dort. Die Kopie ist eine lokale Variable. Außerhalb dieser Routine gilt nur die globale Variable.

Das passiert z.B., wenn man im obigen Programm in der Routine gib_zahl_aus() der Variablen zahl einen neuen Wert zuweist.

Aufgabe 2: Zwei Variablen mit gleichem Namen

Starte das Programm und beschreibe genau, wie die Ausgabe des Programms zustande kommt. Verwende dabei fachgerecht die Begriffe lokale und globale Variable.

Umgehen der Sicherheit

Python sorgt also mit dem Verbot, globale Variablen innerhalb einer Routine zu ändern, für Sicherheit. Das ist gut, manchmal aber auch lästig, wie das folgende Beispiel zeigt.

Carlotta hat ein Programm geschrieben, das ein Rechteck auf den Bildschirm zeichnet.

Vollkommen nachvollziehbar sagt sie: Ich möchte, dass die Eingabe der Zahlen in eine eigene Routine mit dem Name eingabe gespeichert wird.

Das Programm funktioniert nicht. Denn das Programm weist den Variablen innerhalb der Routine eingabe Werte zu und versucht, auf diese Werte innerhalb des Hauptprogramms zuzugreifen. Das funktioniert wegen der oben beschriebenen Sicherheitsmaßnahmen aber nicht.

Carlotta kann das Problem aber umgehen, indem sie dem Programm sagt: "Ich weiß, dass ich den Sicherheitsmechanismus umgehe, aber ich will tatsächlich den globalen Variablen mit den Namen x1,y1,x2 und y2 Werte zuweisen und keine lokale Kopie anlegen."

Aufgabe 3: Kompaktere Schreibweise

Etwas kompakter kann man die vier Zeilen, die mit global beginnen, auch zusammenfassen. Ersetze sie durch die eine Zeile global x1,y1,x2,y2 und teste das Programm.

Manche Programmierer würden sagen, dass die oben beschriebene Art, über Routinen den Wert globaler Variablen zu ändern, hässlich oder sogar unsicher sei. Ganz unrecht haben sie nicht, wenn sie für diesen Fall Funktionen vorziehen, die später in diesem Abschnitt beschrieben werden.

Suche

v
100.102.3.2
dev.inf-schule.de/entwuerfe/python_online/eigene_befehle/global_lokal
dev.inf-schule.de/100.102.3.2
dev.inf-schule.de/@/page/327MznFPua7mn7Rn

Rückmeldung geben