Seite 1 von 1
'global' vermeiden
Verfasst: Sonntag 11. April 2021, 11:53
von zegru
Ich habe folgendes Minimalbeispiel:
Code: Alles auswählen
var = 17
def change_var(new_value):
global var
var = new_value
Wenn ich das 'global' nicht da stehen habe, wird eine lokale Variable namens 'var' gesucht und natürlich nicht gefunden.
Wie kann ich vermeiden, 'global' zu benutzen?
Re: 'global' vermeiden
Verfasst: Sonntag 11. April 2021, 11:57
von __deets__
Indem du das Ergebnis deiner Funktion mittels Return zurückgibst. Und es dann an der Stelle des Aufrufs weiterverarbeitest.
Re: 'global' vermeiden
Verfasst: Sonntag 11. April 2021, 12:01
von Sirius3
Natürlich wird eine lokale Variable namens `var` gefunden, sie wird einfach angelegt.
Die Frage ist ja, was Du machen willst, denn der Code macht im Moment nichts, da change_var gar nicht aufgerufen wird.
Re: 'global' vermeiden
Verfasst: Sonntag 11. April 2021, 12:26
von zegru
Da es sich um ein Minimalbeispiel handelte, hat es gar nichts gemacht. Ich habe nun das Beispiel etwas aufgebohrt, so dass es etwas macht, allerdings nichts Sinnvolles:
Code: Alles auswählen
var = 17
def change_var(new_value):
global var
var += new_value
return var
print(change_var(2))
Das Beispiel gibt entweder '19' oder wenn man 'global' entfernt eine Fehlermeldung aus.
Re: 'global' vermeiden
Verfasst: Sonntag 11. April 2021, 12:34
von nezzcarth
Var sollte ein Parameter der Funktion sein, dann braucht man auch kein global.
Code: Alles auswählen
In [2]: def change_var(var, new_value):
...: var += new_value
...: return var
...:
...:
...: print(change_var(17, 2))
bzw.
Code: Alles auswählen
In [1]: var = 17
In [2]: def change_var(var, new_value):
...: var += new_value
...: return var
...:
In [3]: var = change_var(var, 2)
In [4]: print(var)
19
Re: 'global' vermeiden
Verfasst: Sonntag 11. April 2021, 13:12
von __blackjack__
`new_value` ist ein bisschen irreführend weil es nicht der neue Wert ist, sondern der Wert um den `var` verändert wird.