Я знаю, что использование 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()
когда она "используется" для чего-то? Что здесь происходит?