compile(source, filename, mode, flag, dont_inherit, optimize)
source
- обязательный параметр. Может быть обычной строкой, байтовой строкой, либо объектом абстрактного синтаксического дерева.filename
- обязательный параметр. Имя файла, из которого будет читается код. Если код не будет считан из файла, вы можете написать в качестве параметра любую строку <string>
.mode
- обязательный параметр. Может принимать 3 значения:eval
, если источником является одно выражение;exec
,если источником является блок операторов;single
, если код состоит из одного оператора;flag
- необязательный параметр. По умолчанию flags=0
и определяет, будет ли скомпилированный код содержать асинхронные операции или какие инструкции из __future__
следует использовать. Указывается битами. Если нужно задать несколько инструкций, то их можно указывать через or
;dont_inherit
- необязательный параметр. По умолчанию dont_inherit=False
. Указывает, следует ли использовать __future__
определенные в коде, в дополнение в тем, что указаны во flags;optimize
- необязательный параметр. По умолчанию optimize=-1
.Примечание: Необязательные аргументы
flags
иdont_inherit
определяют, какие флаги компилятора следует активировать и какие будущие функции__future__
следует разрешить. Если ни один из них не присутствует, то код компилируется с теми же флагами, которые влияют на вызываемый кодcompile()
. Если задан аргументflags
, аdont_inherit
не задан, то параметры компилятора и будущие инструкции, указанные аргументомflags
, используются в дополнение к тем, которые использовались бы в любом случае. Еслиdont_inherit
является ненулевым целым числом, то будущие функции и опции компилятора в окружающем коде игнорируются.
Функция compile()
возвращает переданный, в качестве аргумента источник кода, в виде объекта кода или объекта AST, готового к выполнению. Объекты кода, полученные в результате выполнения функции compile()
могут быть выполнены с помощью exec()
или eval()
.
Функция compile()
бросает исключение SyntaxError
, если скомпилированный источник недопустим и ValueErrorесли
, если источник содержит нулевые байты.
Если необходимо разобрать код Python3 в его AST-представлении, то необходимо использовать ast.parse()
.
Предупреждение: При компиляции в объект AST(абстрактного синтаксического дерева) возможен сбой интерпретатора Python с большой(сложной) строкой из-за ограничений глубины стека в компиляторе AST Python.
Заметка: При компиляции строки с многострочным кодом в режиме
single
илиeval
, ввод должен заканчиваться хотя бы одним символом новой строки'\n'
. Это должно облегчить обнаружение неполных и полных операторов в модулеcode
.Изменено в Python 3.5: Ранее
TypeError
вызывалось, когда в источнике встречались нулевые байты.Новое в Python 3.8:
ast.PyCF_ALLOW_TOP_LEVEL_AWAIT
теперь можно передать через необязательный параметрflag
, чтобы обеспечить поддержкуawait
иasync
.
# выполнение в exec >>> x = compile('x = 1\nz = x + 5\nprint(z)', 'test', 'exec') >>> exec(x) # 6 # выполнение в eval >>> y = compile("print('4 + 5 =', 4+5)", 'test', 'eval') >>> eval(y) # 4 + 5 = 9