Локальные переменные определены для функции. Таким образом, пока функция определена, интерпретатор «знает», что будут 2 локальные переменные с именами a
и b
. Полезно для выделения памяти, когда функция будет вызвана. Думайте об этом как проект.
Затем, когда вы попытаетесь eval
какой-то строке, она сделает это, используя контекст (locals()
и globals()
) того, где находится eval
.
У вас нет a
в этой области. Следовательно, он терпит неудачу, поскольку он не определен.