eval() и exec() — это встроенные функции, которые динамически выполняют Python код, но служат разным целям:
eval() — вычисляет одно выражение и возвращает его результатexec() — выполняет произвольные Python-операторы и всегда возвращает Noneeval()eval() принимает только одно выражение — что-то, что возвращает значение.
result = eval("2 + 2") # возвращает 4
result = eval("x * 3") # вычисляет выражение с переменной
Используй eval(), когда тебе нужно вычислить значение из строки, например при парсинге пользовательских формул или выражений.
exec()exec() может обрабатывать полный Python код — включая присваивания, циклы, импорты и определение функций.
exec("x = 10") # присваивание переменной
exec("for i in range(3): print(i)") # выполнение цикла
Используй exec(), когда тебе нужно динамически выполнить блок кода из нескольких операторов, например при запуске сгенерированных скриптов или загрузке логики конфигурации во время работы программы.
| Особенность | eval() | exec() |
|---|---|---|
| Входные данные | Одно выражение | Любой Python-оператор |
| Возвращаемое значение | Результат выражения | Всегда None |
Обе функции представляют серьёзные риски безопасности при использовании с ненадёжными входными данными, так как они могут выполнять произвольный код. Всегда валидируй и санируй входные данные перед передачей в любую из этих функций, и отдавай предпочтение более безопасным альтернативам вроде ast.literal_eval() для парсинга простых типов данных.
Функция eval() может выполнять несколько Python-выражений, разделённых точками с запятой, тогда как exec() ограничена только одним выражением.
Новый — ещё не проверен сообществом
Вы