Python compile() — это встроенный метод, который возвращает объект кода Python из источника (обычная строка, строка байтов или объект AST). Функция compile() возвращает указанный источник как объект кода, готовый к выполнению.

Что такое функция compile() в Python?
Функция compile() используется в коде Python в виде строки или является объектом AST. Объект кода, возвращаемый методом compile(), можно позже вызвать с помощью таких методов, как exec() и eval(), которые будут выполнять динамически сгенерированный код Python.
Синтаксис
|
1 |
compile(source, filename, mode, flag, dont_inherit, optimize) |
Параметры
| Параметр | Описание |
|---|---|
| source | обязателен, источником для компиляции может быть строка, объект Bytes или объект AST. |
| filename | Требуемый. Имя файла, из которого берется исходный код. Если источник не взят из файла, вы можете написать все, что вам нравится. |
| mode | Требуемый. eval – если источником является одно выражение exec – если источником является блок инструкций single – если источником является уникальный интерактивный оператор |
| flags | Необязательный. Как скомпилировать исходный код. Значение по умолчанию 0 |
| dont-inherit | Необязательный. Как скомпилировать исходный код. Значение по умолчанию False |
| optimize | Необязательный. Определяет уровень оптимизации компилятора. Значение по умолчанию -1 |
Метод compile() возвращает объект кода Python. Весь код можете проверить в питон онлайн компилятор на русском.
См. следующий пример кода.
|
1 2 |
data = compile('print(11)', 'eleven', 'eval') exec(data) |
Вывод:
|
1 2 3 |
➜ pyt python3 app.py 11 ➜ pyt |
Метод compile() используется в коде в виде строки или является объектом AST, и вы хотите изменить его на объект кода.
Давайте посмотрим на другой пример программирования.
|
1 2 3 4 5 6 |
# app.py codeString = 'x=19\ny=21\nmul=x*y\nprint("mul =", mul)' code = compile(codeString, 'mulstring.py', 'exec') print(code) exec(code) |
См. следующий вывод.
|
1 2 3 4 |
➜ pyt python3 app.py <code object <module> at 0x103a37660, file "mulstring.py", line 1> mul = 399 ➜ pyt |
Здесь источник находится в стандартной строковой форме. Имя файла mulstring. И режим exec позже позволяет использовать метод exec().
Метод compile() преобразует строку в объект кода Python. Затем объект кода выполняется с помощью метода exec().
compile() с eval()
Давайте посмотрим на сценарий компиляции выражения в код и выполнения его с помощью функции eval().
|
1 2 3 4 5 6 7 8 9 10 |
# app.py el = 11 code = compile('el == 11', '', 'eval') result = eval(code) print(result) code = compile('6 + 5', '', 'eval') result = eval(code) print(result) |
Вывод:
|
1 2 3 4 |
➜ pyt python3 app.py True 11 ➜ pyt |
compile() с источником строки байтов
См. следующий пример использования строки байтов в качестве источника.
|
1 2 3 4 5 6 7 8 |
# app.py el = 11 bytes_str = bytes('el == 11', 'utf-8') print(type(bytes_str)) code = compile(bytes_str, '', 'eval') result = eval(code) print(result) |
См. следующий вывод.
|
1 2 3 4 |
➜ pyt python3 app.py <class 'bytes'> True ➜ pyt |
Вывод
Функция compile() позволяет нам создать объект кода из строки, который впоследствии может быть выполнен с помощью функций exec() и eval().
