Разрешение имен Python и свободных переменныхPython

Программы на Python
Anonymous
Разрешение имен Python и свободных переменных

Сообщение Anonymous »

Справочник по Python 3.12

4.2.6. Взаимодействие с динамическими функциями
Функции eval() и exec() не имеют доступа к полной
среде для разрешения имен. Имена могут разрешаться в локальном
и глобальном пространстве имен вызывающего объекта. Свободные переменные разрешаются
не в ближайшем охватывающем пространстве имен, а в глобальном пространстве имен.

Что это означает иметь в виду? Я не могу этого понять. Этот код работает так, как задумано.

Код: Выделить всё

var = 'global'

def f0():
var = 'local'
def f1():
print(var)
return f1

def ftest(f):
var = 'ftest'
f()

ftest(f0())

#prints 'local' in python 3.10 interpreter (yeah, reference is from python 3.12)
Но, согласно ссылке, я думаю, он должен печатать «глобально»???
Может кто-нибудь объяснить этот маленький абзац? Мне это кажется противоречием.

Подробнее здесь: https://stackoverflow.com/questions/784 ... resolution

Вернуться в «Python»