2012-02-20 24 views
19

Które jest poprawne stosowanie zmiennych globalnych w Pythonie 3 ?:prawidłowe stosowanie zmiennych globalnych W Pythonie 3

1) Stwierdzenie global VAR_NAME raz w skrypcie rdzenia (nie wewnątrz funkcji), a następnie po prostu odnosi się do zmiennej jak VAR_NAME wszędzie

2) stwierdzającą global VAR_NAME raz w ciągu każdej funkcji, która używa zmiennej globalnej, a następnie po prostu odniesieniem do zmiennej jako VAR_NAME przez resztę funkcji i wewnątrz skryptu rdzenia samego

+1

Dla drugiego punktu Rika ważniejsze jest pytanie, co sprawia, że ​​myślisz, że go potrzebujesz? Używanie słowa kluczowego 'global' wśród początkujących jest prawie zawsze oznaką próbowania programowania z użyciem sposobu myślenia innego języka, a jeśli czytasz samouczek, który go zachęca, musisz zdobyć lepszy. – DSM

+0

Tylko # 2 jest nawet istotne. Nie możesz globalnie zadeklarować globalnego. ** musisz ** zmienić znaczenie nazwy w każdej lokalnej przestrzeni nazw, która ma odnosić się do globalnej. Kiedy próbowałeś podejścia nr 1, czy to zadziałało? Jeśli tak, czy możesz to udowodnić na przykładzie? I. Unikaj globali. –

+2

Poza tym, co inni powiedzieli o niestosowaniu globalnego, możesz łatwo sprawdzić, które działa, próbując obu. –

Odpowiedz

33

w pierwszej przypadku, gdy globalne słowo kluczowe jest bezcelowe, a więc nie jest prawidłowe. Definiowanie zmiennej na poziomie modułu sprawia, że ​​jest to zmienna globalna, nie ma potrzeby stosowania globalnego słowa kluczowego.

Drugi przykład to prawidłowe użycie.

Jednak najczęściej używane w przypadku zmiennych globalnych są bez użycia słowa kluczowego global wszędzie. Słowo kluczowe globalne jest potrzebne tylko wtedy, gdy chcesz ponownie przypisać zmiennych globalnych w funkcji/metodzie.

+3

Czy spadkowcy mogą wyjaśnić, co jest nie tak z tą odpowiedzią? – LarsH

25

Musisz użyć słowa kluczowego global w funkcji, jeśli używasz zmiennej globalnej w sposób, który w innym przypadku byłby interpretowany jako przypisanie zmiennej lokalnej. Bez globalnego słowa kluczowego utworzysz zmienną lokalną, która ukrywa globalną w zakresie funkcji.

Oto kilka przykładów:

global_var = 1 

def example1(): 
    # global keyword is not needed, local_var will be set to 1. 
    local_var = global_var 

def example2(): 
    # global keyword is needed, if you want to set global_var, 
    # otherwise you will create a local variable. 
    global_var = 2 

def example3(): 
    # Without using the global keyword, this is an error. 
    # It's an attempt to reference a local variable that has not been declared. 
    global_var += 1 
2

„w taki sposób, że w przeciwnym razie być interpretowane jako przypisanie do zmiennej lokalnej” --- tak, ale tutaj jest subtelny detal:

------------------- błąd: zmienna lokalna 'c' odnosi przed cesją

def work(): 
    c += 3 

c = 0 

work() 
print(c) 

-------------- ----- błąd: lokalna zmienna "c", do której odwołuje się przed przypisaniem

c = 0 

def work(): 
    c += 3 

work() 
print(c) 

------------------- wydruków [3]

def work(): 
    c.append(3) 

c = [] 

work() 
print(c) 

------------- ------ drukuje [3]

c = [] 

def work(): 
    c.append(3) 

work() 
print(c) 
Powiązane problemy