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.

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.

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.