Python Glossary English

все 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Сообщить о неточности