Я знаю, что использование eval() обычно означает "плохой код", но я наткнулся на странное поведение функции eval() во внутренних функциях, которые я не мог понять. Если мы напишем:
def f(a):
def g():
print(eval('a'))
return g()
Запуск f(1) в этом случае дает NameError, утверждая, что a не определен. Однако, если мы определим
def f(a):
def g():
b = a + 1
print(eval('a'))
return g()
Затем выполнение f(1) печатает 1.
Что-то происходит с локальными и глобальными переменными, которые я не могу понять. Является a только локальная переменная в g() когда она "используется" для чего-то? Что здесь происходит?