Итак, я получаю, что
x = 5
def f():
print(x)
f()
print(x)
возвращает 5 и 5.
Я также получаю, что
x = 5
def f():
x = 7
print(x)
f()
print(x)
возвращает 7 и 5.
Что не так со следующим?
x = 5
def f():
if False:
x = 7
print(x)
else:
print(x)
f()
print(x)
Я бы предположил, что, поскольку x=7
никогда не происходит, я должен получить 5 и 5 снова. Вместо этого я получаю
UnboundLocalError: local variable 'x' referenced before assignment
Считает ли python x
локальной переменной, потому что в этом блоке с отступом есть выражение присваивания независимо от того, выполняется оно или нет? Какое именно правило?