Lokalne (?) zmienna odwołująca się przed przypisaniem [duplikat]

to pytanie ma już odpowiedzi tutaj : przypisanie zmiennej z funkcji rodzica: "zmienna lokalna odwołana przed przypisaniem" [duplikat] (5 odpowiedzi) Python 3: UnboundLocalError: zmienna lokalna odwołująca się przed przypisaniem [duplikat] (5 odpowiedzi) Zamknięte w zeszłym roku .
test1 = 0
def testFunc():
    test1 += 1
testFunc()

Otrzymuję następujący błąd:

UnboundLocalError: zmienna lokalna 'test1' / align = "left" /

Błąd mówi, że 'test1' jest zmienną lokalną, ale myślałem, że ta zmienna jest globalna

Czy jest globalny czy lokalny i jak rozwiązać ten błąd nie przekazując globalnego test1 jako argumentu do testFunc?

Author: Samuel Liew, 2012-08-10

3 answers

Aby zmodyfikować test1 wewnątrz funkcji, musisz zdefiniować test1 jako zmienną globalną, na przykład:

test1 = 0
def testFunc():
    global test1 
    test1 += 1
testFunc()

Jeśli jednak potrzebujesz tylko odczytać zmienną globalną, możesz ją wydrukować bez użycia słowa kluczowego global, Tak:

test1 = 0
def testFunc():
     print test1 
testFunc()

Ale gdy chcesz zmodyfikować zmienną globalną, musisz użyć słowa kluczowego global.

 239
Author: Florin Stingaciu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 14:07:56

Najlepsze rozwiązanie: nie używaj globals

>>> test1 = 0
>>> def test_func(x):
        return x + 1

>>> test1 = test_func(test1)
>>> test1
1
 57
Author: jamylak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 15:45:26

Musisz określić, że test1 jest globalny:

test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()
 11
Author: Stanislav Heller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 15:41:28