Взаємодія з динамічними функціями

Оновлено: 28.04.2023

Розділення імен вільних змінних відбувається під час виконання, а не під час компіляції. Це означає, що наступний код виведе 42:

i = 10
def f():
    print(i)
i = 42
f()

Функції eval() і exec() не мають доступу до повного середовища для розпізнавання імен. Імена можуть бути дозволені в локальному та глобальному просторах імен абонента. Вільні змінні вирішуються не в найближчому охоплюючому просторі імен, а в глобальному просторі імен. 1 Функції exec() і eval() мають додаткові аргументи для заміни глобального та локального простору імен. Якщо вказано лише один простір імен, він використовується для обох.