While ohne Global variable

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
Knuffi
User
Beiträge: 60
Registriert: Dienstag 28. Oktober 2014, 19:52

Hallo Leute,
ich schaffe es nicht in einer Schleife (While) eine globale Variable zu definieren:

Code: Alles auswählen

def test()
 while s == 1:
   global xx
   mach irgend etwas
   xx = 1

##Hauptprogramm
mach irgendetwas
test()
print(xx)

das Hauptprogramm stürzt mit der Fehlermeldung:
global name "xx" is not defined

Wer kann mir helfen meinen Fehler zu finden.
Danke
gruß
Knuffi
Knuffi
User
Beiträge: 60
Registriert: Dienstag 28. Oktober 2014, 19:52

Habe den Fehler gefunden, muss zuerst XX = 0 definieren
BlackJack

@Knuffi: Wenn überhaupt ``global`` dann sollte das nicht irgendwo in einer Schleife deklariert werden sondern am Anfang der Funktion, damit man die Monströsität auch gleich sieht und sie sich nicht irgendwo in der Funktion versteckt.

Aber eigentlich sollte man ``global`` überhaupt nicht verwenden. Wenn die Funktionen einen Wert hat der nach aussen getragen werden soll, dann gibt man diesen Wert zurück und schafft sich nicht undurchsichtigen Abhängigkeiten durch globale Variablen. Das gilt auch für den umgekehrten Weg: Werte (ausser Konstanten) sollten als Argumente an eine Funktion übergeben werden und nicht einfach so aus der ”Umgebung” kommen.

Wenn man das Hauptprogramm ebenfalls in eine Funktion steckt und nicht auf Modulebene stehen hat, dann passiert so etwas auch gar nicht erst.
Antworten