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

27

Possible Duplicate:
Using global variables in a function other than the one that created them

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

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

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

Использованиеglobal среди начинающих обычно признак плохого дизайна. Rik Poggi
Это должно ответить на ваш вопрос:stackoverflow.com/questions/423379/… Похоже, что Python не изменит глобальное значение, если вы не укажете, что это то, что вы хотите сделать. Phil Nicholson
без использованияglobal Вы не можете изменять значение глобальной переменной внутри функции, вы можете использовать только ее значение внутри функции. Но если вы хотите присвоить ему новое значение, вы должны использоватьglobal Ключевое слово первое. Ashwini Chaudhary

Ваш Ответ

2   ответа
49

COUNT = 0

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

increment()

print COUNT

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

Error: User Rate Limit Exceeded
20

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

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

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

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

Похожие вопросы