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

Пояснение. Вы можете свободно читать не локальные переменные без дополнительных объявлений. Но как только вы внутри функции попытаетесь такую переменную поменять, питон сразу будет считать эту переменную локальной и перестанет видеть её там, где до того вроде бы прекрасно видел. Так что нужно явно описать область видимости такой переменной, чтобы питон перестал ругаться.

→ Ссылка