x=10
def f():
print(x)
x="HELLO"
f()
Трассировка:
UnboundLocalError: local variable 'x' referenced before assignment
По сути при вызове функции f для нее создается local namespace
Внутри, при вызове функции print с аргументом x, интерпретатор ищет переменную x в local namespace, затем в global namespace, затем в builtins.
А при связывании x со строкой "hello", имя x будет находится в local namespace функции.
Но видимо он этого не делает, почему?