exec()

Функция exec() выполняет строку (или скомпилированный объект кода) как набор Python-инструкций. В отличие от eval(), она работает с полноценными конструкциями: присваиваниями, циклами, объявлениями функций. Сама функция всегда возвращает None.

Сигнатура

exec(object, globals=None, locals=None)

Параметры:

  • object — строка с кодом или объект, полученный из compile().

  • globals — словарь глобального пространства имён.

  • locals — словарь локального пространства имён.

Возвращает: None. Все эффекты сохраняются в переданных словарях.

Примеры

Выполнение простого блока инструкций:

code = "a = 5\nb = 7\nprint(a + b)"
exec(code)
12

Передача собственного пространства имён:

env = {}
exec("x = 42\ny = x * 2", env)
print(env["x"], env["y"])
42 84

Объявление функции через exec:

src = """
def square(n):
    return n * n
"""
ns = {}
exec(src, ns)
print(ns["square"](9))
81

Цикл, генерируемый динамически:

exec("for i in range(3): print('tick', i)")
tick 0
tick 1
tick 2

Ограничение встроенных функций:

restricted = {"__builtins__": {"print": print}}
exec("print('hello from sandbox')", restricted)
hello from sandbox

Предупреждение

Запуск произвольного кода через exec() опасен: код имеет тот же доступ, что и приложение. Не вызывайте exec() для данных из внешних источников без полной проверки.

См. также

Примечание

Описание основано на официальной документации Python (docs.python.org), распространяемой под лицензией PSF License v2. © Python Software Foundation.