Следующий код работает как положено в Python 2.5 и 3.0:
a, b, c = (1, 2, 3)
print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
Однако, когда я раскомментирую строку (B) , я получаю UnboundLocalError: 'c' not assigned
в строке (A) . Значения a
и b
напечатаны правильно. Это полностью сбило меня с толку по двум причинам:
Почему в строке (A) возникает ошибка времени выполнения из-за более позднего оператора в строке (B) ?
Почему переменные a
и b
печатаются как положено, а c
вызывает ошибку?
Единственное объяснение, которое я могу придумать, состоит в том, что локальная переменная c
создается присваиванием c+=1
, которое имеет прецедент над "глобальной" переменной c
даже перед локальной переменная создана. Конечно, для переменной не имеет смысла «красть» область видимости до того, как она существует.
Может кто-нибудь объяснить это поведение?