Рубрики
Без рубрики

Функция Python Compile ()

Python Compile () Функция, Строка источника для компиляции Python к объекту кода, код компиляции Python, Compile Python () и EXEC (), Python Compile AST, EVAL ()

Автор оригинала: Pankaj Kumar.

Функция Python Compile () используется для компиляции источника в объект кода или модуля AST модуля. Возвращенный объект кода может быть выполнен с использованием функции EXEC () или EAV () на основе предоставленного режима для построения объекта кода.

Python Compiele ()

Синтаксис функции Python Compile ():

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

Давайте посмотрим на функциональные аргументы Compile ().

  • Источник : Источник для создания объекта кода. Это может быть объект модуля String, Byte String или AST.
  • Имя файла : Если вы читаете строку кода из файла, вы должны предоставить его название здесь для справки. Он не используется в создании объекта кода, скорее он используется для получения читаемого кода.
  • Режим : Этот аргумент указывает тип кода. Допустимые значения exec , Eval и одинокий Отказ Использовать EXEC Если источник содержит несколько операторов Python. Используйте Eval, если источник – это однократное выражение Python. Используйте Single, если источник состоит из одного интерактивного утверждения.
  • Дополнительные аргументы Флаги и dont_inherit Контроль, какие будущие заявления влияют на компиляцию источника. Если ни один не присутствует (или оба равен нулю) Код скомпилирован с этими будущими операторами, которые действуют в коде, который вызывает компиляцию ().
  • Аргумент Оптимизировать Определяет уровень оптимизации компилятора.

Примеры Python Compile ()

Давайте посмотрим на пример функции Compile () с разными источниками.

Компиляция источника строки к коду

# compile() with string source
code_str = 'x=5\ny=10\nprint("sum =",x+y)'
code = compile(code_str, 'sum.py', 'exec')
print(type(code))
exec(code)

Выход:


sum = 15

Обратите внимание, что тип возврата функции компиляции является объектом «кода». Кроме того, мы используем exec () здесь, потому что исходная строка содержит несколько операторов Python. Обратите внимание, что объект кода выполняется функцией EXEC () и «напечатана в консоли.

Чтение кода из файла и компиляция

Допустим, у нас есть my_code.py файл со следующим контентом.

x = 10
y = 20
print('Multiplication = ', x * y)

Мы можем прочитать этот контент файла в качестве строки и компилировать его для объекта кода и выполнить его.

# reading code from a file
f = open('my_code.py', 'r')
code_str = f.read()
f.close()
code = compile(code_str, 'my_code.py', 'exec')
exec(code)

Выход: Умножение

Компилировать () с Eval ()

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

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

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

Выход:

True
10

Компилировать () с байтовым строковым источником

Давайте посмотрим на пример используя байтовую строку в качестве источника.

bytes_str = bytes('x == 5', 'utf-8')
print(type(bytes_str))
code = compile(bytes_str, '', 'eval')
result = eval(code)
print(result)

Выход:


True

Компилировать () с объектом AST

Давайте посмотрим на пример использования объекта AST с функцией Compile ().

import ast

ast_object = ast.parse("print('Hello world!')")
print(type(ast_object))
code = compile(ast_object, filename="", mode="exec")
print(type(code))
exec(code)

Выход:


Резюме

Функция Python Compile () позволяет нам создавать объект кода из строки, которая может быть позже выполнена с использованием функций exec (), так и eval (). Вы должны взять на себя дополнительную помощь, если вы принимаете пользовательский ввод и компилируете его для кода и выполнить его, потому что он может иметь нежелательные эффекты, например, выдачу RM -RF/ команда.

Ссылка: Официальная документация