Локальная (?) Переменная, на которую ссылаются перед назначением

Возможный дубликат:
локальная переменная, указанная перед назначением
Python 3: UnboundLocalError: локальная переменная, указанная перед назначением

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

Я получаю следующую ошибку:

UnboundLocalError: локальная переменная 'test1', указанная перед назначением.

Ошибка говорит, что 'test1' - это локальная переменная, но я думал, что эта переменная глобальна

Итак, он глобальный или локальный и как решить эту ошибку, не передавая глобальный test1 как аргумент testFunc?

Ответ 1

Чтобы изменить test1 внутри функции, вам нужно будет определить test1 как глобальную переменную, например:

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

Однако, если вам нужно только прочитать глобальную переменную, вы можете ее распечатать, не используя ключевое слово global, например:

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

Но всякий раз, когда вам нужно изменить глобальную переменную, вы должны использовать ключевое слово global.

Ответ 2

Лучшее решение: не используйте global s

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

>>> test1 = test_func(test1)
>>> test1
1

Ответ 3

Вы должны указать, что test1 является глобальным:

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