Я инициализирую глобальную переменную i равной 0 и определение функции. В def я хочу инициализировать локальный 'j' глобальным 'i', а затем присвоить 1 глобальному 'i', но компилятор думает, что когда я присваиваю 1 'i', я инициализирую его.
Это не работает:
i = 0
def doSomething():
j = i # compiler throws UnboundLocalError here
i = 1
и это работает:
i = 0
def doSomething():
j = i
Я бы перефразировал заголовок "Python, смешивающий глобальную и локальную переменные?" на «Почему Python защищает от использования глобальных и локальных переменных?». Ответ: «Потому что не следует».
Короткий ответ, без явного global var, var доступен только для чтения в локальной области.






Перед изменением вам необходимо объявить глобальную переменную внутри функции.
i = 0
def doSomething():
global i #needed to modify the global variable.
j = i # compiler throws UnboundLocalError here
i = 1
Присвоение переменной в любом месте тела функции делает эту переменную местный