Seite 1 von 1

global keyword

Verfasst: Mittwoch 26. Oktober 2022, 10:32
von nav31
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)

Re: global keyword

Verfasst: Mittwoch 26. Oktober 2022, 11:18
von __deets__
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.

Re: global keyword

Verfasst: Mittwoch 26. Oktober 2022, 14:20
von /me
"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.