Подтвердить что ты не робот

Невозможно увеличить глобальную переменную от функции в python

Возможный дубликат:
Использование глобальных переменных в функции, отличной от той, которая их создала

У меня есть следующий script:

COUNT = 0

def increment():
    COUNT = COUNT+1

increment()

print COUNT

Я просто хочу увеличить глобальную переменную COUNT, но это дает мне следующую ошибку:

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

Почему это так?

4b9b3361

Ответ 1

его глобальную переменную, сделайте так:

COUNT = 0

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

increment()

print COUNT

Доступ к глобальным переменным возможен без объявления глобального, но если вы собираетесь изменить их значения, требуется глобальное объявление.

Ответ 2

Это связано с тем, что глобальные переменные не попадают в область вашей функции. Вы должны использовать оператор global, чтобы заставить это для назначения:

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

Обратите внимание, что использование globals - действительно плохая идея - это делает код трудным для чтения и сложным в использовании. Вместо этого верните значение из своей функции и используйте это, чтобы что-то сделать. Если вам нужно иметь доступ к данным из ряда функций, подумайте над созданием класса.

Также стоит отметить, что CAPITALS является общим зарезервированным для констант, поэтому неплохо назвать ваши переменные такими, как это. Для обычных переменных предпочтительнее lowercase_with_underscores.