все Python 3Встроенные функциипонятие
compile
выполнение
Компилирует строку или AST в объект кода (code object). Используется с exec() или eval() для динамического кода.
Синтаксис
compile(source, filename, mode)
Аргумент mode обязан совпадать с тем, что внутри: 'eval' принимает ровно одно выражение (строка с присваиванием сразу даст SyntaxError), 'exec' — любой набор инструкций, 'single' — одну инструкцию с печатью результата, как в интерактивной оболочке. Второй аргумент filename нигде не открывается — это просто подпись, которая всплывёт в трейсбеке и в отладчике, поэтому осмысленное имя вроде '<user-formula>' помогает потом читать ошибки. Смысл отдельного compile — разобрать исходник один раз и потом гонять готовый code object в цикле; на безопасность это не влияет никак, опасен по-прежнему момент exec/eval.
Примеры
code = compile('1+2', '<string>', 'eval')
print(eval(code)) # → 3
stmt = compile('x=5\nprint(x)', '<s>', 'exec')
exec(stmt) # → 5
code2 = compile('[x**2 for x in range(5)]','<s>','eval')
print(eval(code2)) # → [0,1,4,9,16]
print(type(code)) # → <class 'code'>
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности