'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: 27
Registriert: Freitag 9. Oktober 2020, 09:22

Sonntag 11. April 2021, 11:53

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: 9685
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 11. April 2021, 11:57

Indem du das Ergebnis deiner Funktion mittels Return zurückgibst. Und es dann an der Stelle des Aufrufs weiterverarbeitest.
"Herr Fachmann, wie bohre ich mir ein Loch ins Knie?"

"Das sollten sie nicht tun! Und wenn man operiert, muss man auf Hygiene achten, und nicht einen Bohrer, der gerade in der Wand ein Loch gebohrt hat, nehmen."

"Das war nicht meine fachliche Frage!!"
Sirius3
User
Beiträge: 14425
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 11. April 2021, 12:01

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: 27
Registriert: Freitag 9. Oktober 2020, 09:22

Sonntag 11. April 2021, 12:26

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: 1288
Registriert: Samstag 16. April 2011, 12:47

Sonntag 11. April 2021, 12:34

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: 8572
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 11. April 2021, 13:12

`new_value` ist ein bisschen irreführend weil es nicht der neue Wert ist, sondern der Wert um den `var` verändert wird.
“Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”
Antworten