'global' vermeiden

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
zegru
User
Beiträge: 49
Registriert: Freitag 9. Oktober 2020, 09:22

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?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Indem du das Ergebnis deiner Funktion mittels Return zurückgibst. Und es dann an der Stelle des Aufrufs weiterverarbeitest.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Natürlich wird eine lokale Variable namens `var` gefunden, sie wird einfach angelegt.

Code: Alles auswählen

def change_var(new_value):
    var = new_value
Die Frage ist ja, was Du machen willst, denn der Code macht im Moment nichts, da change_var gar nicht aufgerufen wird.
zegru
User
Beiträge: 49
Registriert: Freitag 9. Oktober 2020, 09:22

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.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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

Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`new_value` ist ein bisschen irreführend weil es nicht der neue Wert ist, sondern der Wert um den `var` verändert wird.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten