Следующий код работает как в 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
еще до создается локальная переменная. Разумеется, для переменной не имеет смысла "красть" область до ее существования.
Может ли кто-нибудь объяснить это поведение?