Python Error in double function -> UnboundLocalError: local variable 'x1' referenced before assignment
Так всё работает хорошо:
def x(x1):
def y(y1):
return x1 + y1
return y
print(x(5)(6))
А так, если я проверяю переменную, то вылезает что она у меня не определена:
def x(x1):
def y(y1):
if x1 == 5:
x1 = 10
return x1 + y1
return y
print(x(5)(6))
Не подскажите, в чём может быть ошибка?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
def x(x1):
def y(y1):
nonlocal x1 # <-- добавлено явное указание области видимости
if x1 == 5:
x1 = 10 # <-- из-за этого переменная считается локальной
return x1 + y1
return y
print(x(5)(6))
# 16
Пояснение. Вы можете свободно читать не локальные переменные без дополнительных объявлений. Но как только вы внутри функции попытаетесь такую переменную поменять, питон сразу будет считать эту переменную локальной и перестанет видеть её там, где до того вроде бы прекрасно видел. Так что нужно явно описать область видимости такой переменной, чтобы питон перестал ругаться.