Для следующего кода 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, в то время как оба обращаются к переменной, которая является локальной или глобальной.