eval(expression, /, globals=None, locals=None)
expression
- строка-выражение, которую требуется исполнить. Либо объект кода, что возвращает compile()
,globals=None
- словарь глобального пространства, относительно которого следует исполнить выражение,locals=None
- переменные локального пространства, в котором следует исполнить выражение.Изменено в Python 3.13: аргументы
globals
иlocals
теперь могут передаваться как ключевые слова.
Функция eval()
выполняет строку-выражение, переданную ей в качестве обязательного аргумента и возвращает результат выполнения этой строки.
Аргументами eval()
являются строка-выражение expression
, которую требуется исполнить и необязательные глобальные globals
и локальные locals
значения. Передаваемые в функцию глобальные переменные должны быть словарем dict
. Передаваемые локальные переменные могут быть любым отображающим объектом.
Если глобальные переменные указаны, но словарь globals
не содержит атрибута __builtins__
данные переданного словаря со значениями будут дополнены данными общего глобального пространства, перед разбором выражения. Таким образом, выражение будет иметь доступ ко всем встроенным модулям.
Если локальные locals
переменные не указаны, то используется словарь глобального пространства.
Если оба словаря опущены, выражение выполняется с глобальными и локальными значениями в среде, где функция eval()
вызывается.Обратите внимание, eval()
будет иметь доступ только к вложенным областям (нелокальным) во внешней среде, если на них уже есть ссылки в области, которая вызывает eval()
(например, с помощью оператора nonlocal
).
>>> x = 1 >>> eval('x+1') # 2
Изменено в Python 3.13: семантика пространства имен
locals
по умолчанию была скорректирована, как описано для встроенной функцииlocals()
.
Функция eval()
также может быть использована для выполнения кода, который возвращает функция compile()
. Если объект кода в compile()
собран в режиме exec
будет возвращено None
.
Подсказка: динамическое выполнение инструкций поддерживается функцией exec()
. Функции globals()
и locals()
возвращают текущий глобальный и локальный словарь соответственно, который может быть полезен для передачи eval()
или exec()
.
Если заданный источник является строкой, то начальные и конечные пробелы и табуляции удаляются.
Если необходимо выполнить динамический код, записанный в строку, то обратитесь к документации по функции exec()
.
eval()
.>>> x = "print('Привет')" >>> eval(x) # Привет >>> y = 'print("5 + 10 =", (5+10))' >>> eval(y) # 5 + 10 = 15 >>> s=3 >>> eval('s==3') # True >>> eval('s + 1') # 4 >>> eval('s') # 3 >>> eval('str(s)+"test"') # '3test'