Для следующего кода Python 2.7:
#!/usr/bin/python
def funcA():
print "funcA"
c = 0
def funcB():
c += 3
print "funcB", c
def funcC():
print "funcC", c
print "c", c
funcB()
c += 2
funcC()
c += 2
funcB()
c += 2
funcC()
print "end"
funcA()
Я получаю следующую ошибку:
File "./a.py", line 9, in funcB
c += 3
UnboundLocalError: local variable 'c' referenced before assignment
Но когда я прокомментирую строку c += 3
в funcB
, я получаю следующий вывод:
funcA
c 0
funcB 0
funcC 2
funcB 4
funcC 6
end
Доступен ли c
в обоих случаях +=
в funcB
и =
в funcC
? Почему он не бросает ошибку для одного, но не для другого?
У меня нет выбора сделать глобальную переменную c
, а затем объявить global c
в funcB
. Во всяком случае, дело не в том, чтобы получить c
с приращением в funcB
, а за то, почему он бросает ошибку для funcB
, а не для funcC
, в то время как оба обращаются к переменной, которая является локальной или глобальной.