2012-05-08 13 views
21

Possible Duplicate:
Using global variables in a function other than the one that created themkann nicht globalen Variable von der Funktion in Python

erhöht habe ich folgendes Skript:

COUNT = 0 

def increment(): 
    COUNT = COUNT+1 

increment() 

print COUNT 

ich nur globales Variable COUNT erhöhen will, aber das gibt mir die folgende Fehlermeldung:

Traceback (most recent call last): 
    File "test.py", line 6, in <module> 
    increment() 
    File "test.py", line 4, in increment 
    COUNT = COUNT+1 
UnboundLocalError: local variable 'COUNT' referenced before assignment 

Warum ist es so?

+1

Die Verwendung von 'global' unter Anfängern ist normalerweise ein Zeichen für schlechtes Design. –

+0

Ohne 'global' zu verwenden, können Sie den Wert einer globalen Variablen innerhalb einer Funktion nicht ändern. Sie können den Wert nur innerhalb der Funktion verwenden. Aber wenn Sie ihm einen neuen Wert zuweisen möchten, müssen Sie zuerst das Schlüsselwort 'global' verwenden. –

+0

Dies sollte Ihre Frage beantworten: http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-created-them Sieht aus wie Python nicht Ändern Sie den globalen Wert, wenn Sie nicht angeben, dass dies der Fall ist. –

Antwort

36

seine eine globale Variable dies so tun:

COUNT = 0 

def increment(): 
    global COUNT 
    COUNT = COUNT+1 

increment() 

print COUNT 

Globale Variablen ohne Deklarieren der globalen zugegriffen werden kann, aber wenn man ihre Werte gehen, um die globale Deklaration erforderlich zu ändern.

+0

Danke für die Lösung. Dieser ist besser, da ich bereits versucht habe, "count + = 1" alleine zu verwenden, aber nicht funktionierte. Das hat für mich funktioniert. Vielen Dank. – PravinY

17

Dies ist, weil Globals nicht in den Umfang Ihrer Funktion bluten. Sie haben die global Anweisung verwenden diese für die Zuordnung zu erzwingen:

>>> COUNT = 0 
>>> def increment(): 
...  global COUNT 
...  COUNT += 1 
... 
>>> increment() 
>>> print(COUNT) 
1 

Beachten Sie, dass eine wirklich schlechte Idee Globals ist mit - es Code schwer zu lesen macht, und schwer zu bedienen. Übergeben Sie stattdessen einen Wert von Ihrer Funktion und verwenden Sie das, um etwas zu tun. Wenn Sie Daten aus einer Reihe von Funktionen abrufen müssen, sollten Sie eine Klasse erstellen.

Es ist auch erwähnenswert, dass CAPITALS im Allgemeinen für Konstanten reserviert ist, so ist es eine schlechte Idee, Ihre Variablen so zu benennen. Für normale Variablen wird lowercase_with_underscores bevorzugt.

Verwandte Themen