global keyword

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nav31
User
Beiträge: 1
Registriert: Sonntag 3. April 2022, 19:01

Hallo zusammen, ich habe vor 3 Monaten angefangen mir python beizubringen. Jetzt bin ich beim Thema global keyword angekommen. Was genau macht dieses global im unteren Programm? So wie ich es verstanden habe, benutzt man dieses global keyword, um die global variable zu verändern innerhalb einer Funktion. Wenn ich das Programm laufen lassen wird zweimal "local x" ausgeben. Wird die global variable x=" global " durch x= "local x" ersetzt oder wird dem programm gesagt er solle mit der Variablen x = "local x" weiter als global Variable arbeiten ? :roll: nochmals Danke im Voraus für eure Rückmeldungen :D


x = "global x"

def test():
global x
x = "local x"
#print(y)
print(x)

test()
print(x)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code bitte in code-tags setzen. Das ist der </>-Knopf im vollstaendigen Editor. Sonst gehen die in Python enorm wichtigen Einrueckungen verloren.

Zu deiner Frage: eine Zuweisung

Code: Alles auswählen

def funktion():
    x = 10
behandelt Python implizit als lokale Variable, die nur sichtbar ist in der Funktion. Weil es anders als in anderen Sprachen keine explizite Deklaration von Variablen gibt. Wenn sich also diese Anweisung auf eine globale Variable beziehen soll, muss man das dem Interpreter extra mitteilen. Und damit wird jede Zuweisung an die Variable so behandelt, als ob sie auf der Moduleben gestanden haette, wie dein erstes Statement.

Eine wichtige allgemeine Anmerkung: globaler Zustand ist ein grosses Problem, und sollte tunlichst vermieden werden. Den Mechanismus zu verstehen ist ok. Ihn zu benutzen in 99% der Faelle falsch, und einem Anfaenger ist es nicht moeglich zu entscheiden, wann dem so ist, und wann nicht. Weshalb jeder Gedanke an "oh, ich weiss, ich benutze eine globale Variable" zu weiterem nachdenken fuehren sollte. Nicht zu weiteren globalen Variablen.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

"global" habe ich in inzwischen fast 20 Jahren Python ein einziges Mal gebraucht (mir fiel einfach keine passendere Lösung ein). Beim Umstieg auf Python 3 konnte ich dann zumindest ein "nonlocal" daraus machen.
Antworten