Функция compile() в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

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

Возвращенный объект кода может быть выполнен с использованием функции exec() или eval() в зависимости от предоставленного режима для создания объекта кода.

Синтаксис:

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

Аргументы:

  • source - обязательный аргумент, это исходный код, или строка, байтовая строка, или объект модуля AST, который необходимо скомпилировать.
  • filename - обязательный аргумент, содержащий код. Он не используется при создании объекта кода, скорее он используется для обеспечения читабельности кода. 
  • mode - этот аргумент указывает тип кода. Допустимые значения: exec, eval и single.
    • Применяйте exec, если источник содержит несколько операторов Python
    • Применяйте eval, если источник – это одно выражение. 
    • Применяйте single, если источник состоит из одного интерактивного оператора. 

Дополнительные аргументы: 

  • flags - значение по умолчанию 0
  • dont_inherit - определяет поток выполнения. Значение по умолчанию False
  • optimize - значение по умолчанию -1.

Примеры:

# Источник кода
code_str = 'x=30\ny=25\nprint("Сумма",x - y)'

# Получаемый код
code = compile(code_str, 'sum.py', 'exec')

# Выводим информацию
print(type(code))

exec(code)

Результат:

>>> <class 'code'>
>>> Сумма 5

Ещё один пример, чтение кода из файла. Создам рядом файл code.py со следующим содержимым:

code.py

names_list = ['Владислав', 'Александр', 'Алексей', 'Владимир']
print(names_list)

В основном файле main.py выполню данный код

# Чтение из файла code
with open(file='code.py', mode='r', encoding='utf-8') as source:
    code_str = source.read()
    code = compile(code_str, 'code.py', 'exec')
    exec(code)

Результат:

>>> ['Владислав', 'Александр', 'Алексей', 'Владимир']

Пример с eval()

Давайте рассмотрим пример компиляции выражения Python в код и его выполнения с помощью функции eval().

# Пример сравнения
x = 20
code = compile('x == 5', '', 'eval')
result = eval(code)
print(result)

code = compile('x + 5', '', 'eval')
result = eval(code)
print(result)

Результат:

>>> False
>>> 25

Пример с объектом AST

import ast

ast_object = ast.parse("print('Добро пожаловать, дорогой гость!')")

print(type(ast_object))

code = compile(ast_object, filename="", mode="exec")

print(type(code))

exec(code)

Результат:

>>> <class 'ast.Module'>
>>> <class 'code'>
>>> Добро пожаловать, дорогой гость!

С источником байтовой строки

x = 25

bytes_str = bytes('x == 25', 'utf-8')

print(type(bytes_str))

code = compile(bytes_str, '', 'eval')

result = eval(code)

print(result)

Результат:

>>> <class 'bytes'>
>>> True
Теги записи: Python, Основы Python, compile(),
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)