Function compile in python

What is Python compile() function?

Python Compile() Function (1)

Hey, folks! In this article, we will be focusing on Python compile() function.

Understanding the Working of Python compile() function

Let me take you all back to the system/OS programming from where we deal with the concept of macros and functions. Macros are basically some pre-defined code blocks that get executed with the current source code upon a function call. That is, the entire functional block gets executed in one shot within any working program code.

On the similar lines, Python compile() function helps us define a piece of code within the function. Further, it generates a code block object, that can be used to execute the defined code at any point within the program.

The input-source-code defined within the compile() function can be easily executed in any program through the code object returned from the function.

Thus, Python compile() function helps attain reusability and proves out to be more reliable.

Syntax of Python compile() function

Python compile() function accepts the source code as argument and returns the code object which is readily available for execution.

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

Now let us understand the parameter list of Python compile() function in detail.

Parameters of compile() function

  • source (Required): It is the source code or the byte string to be compiled.
  • filename (Required): It is the name of the file which contains the ‘source’. If not present, we can enter a name for the source code.
  • mode (Required): It is the mode within which the source would be compiled. These three modes are as follows:
  1. eval: This mode is used when the source is a single expression to compile.
  2. single: Used when the source contains a single interactive statement.
  3. exec: This mode is used when the source contains a block of statements to execute.
Читайте также:  Type of java bean

Optional Parameters:

  • flags : Default value is 0.
  • dont_inherit : Decides the flow of executions. The default value is False.
  • Optimize : Default value is -1.

Examples of Python compile() function

In the below example, we have passed a single variable ‘var = 10’ as a source code to the compile() function. Further, we have used ‘single mode‘ to compile and execute the source passed to the argument list.

var = 10 compile_obj = compile('var', 'Value', 'single') exec(compile_obj)

Using compile() function, the code object associated to the source code passed gets created.

Then, Python exec() function is used to dynamically compile the code object.

Now, we have passed a single expression for execution to the compile() function and thus, ‘eval mode‘ is being used here.

action = 'print(100)' compile_obj = compile(action, 'Display', 'eval') exec(compile_obj)

As seen below, we have passed a string of source code to the compile() function and have used ‘exec mode‘ to execute the code blocks through the code object created using exec() function.

action = 'x = 15\ny =10\nproduct=x*y\nprint("Product of x and y =",product)' compile_obj = compile(action, 'Product', 'exec') exec(compile_obj)

Conclusion

By this, we have come to the end of this topic. Please feel free to comment below in case you come across any doubt.

For more such posts related to Python Programming, please do visit Python Tutorials AskPython.

References

Источник

Функция compile() в Python

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

Компиляция

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

Давайте посмотрим на аргументы функции compile():

  • source: Источник для создания объекта кода. Это может быть строка, байтовая строка или объект модуля AST.
  • filename: Если вы читаете строку кода из файла, вы должны указать здесь его имя для справки. Он не используется при создании объекта кода, скорее он используется для обеспечения читабельности кода.
  • mode: этот аргумент указывает тип кода. Допустимые значения: exec, eval и single. Используйте exec, если источник содержит несколько операторов Python. Используйте eval, если источник – это одно выражение. Используйте один, если источник состоит из одного интерактивного оператора.
  • Необязательные аргументы flags и dont_inherit управляют тем, какие будущие операторы влияют на компиляцию исходного кода. Если ни один из них не присутствует (или оба равны нулю), код компилируется с теми будущими операторами, которые действуют в коде, вызывающем compile().
  • Аргумент optimize указывает уровень оптимизации компилятора.
Читайте также:  Html input number yii2

Примеры

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

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

# compile() with string source code_str = 'x=5\ny=10\nprint("sum EnlighterJSRAW" data-enlighter-language="python"> sum = 15

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

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

Допустим, у нас есть файл 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)

compile() с 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)

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

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

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

С объектом 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 /.

Читайте также:  Python ms access linux

Источник

Функция compile() в Python

Макросы — это в основном некоторые предопределенные блоки кода, которые выполняются с текущим исходным кодом при вызове функции. То есть весь функциональный блок выполняется за один раз в любом рабочем программном коде.

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

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

Compile() функция

Синтаксис функции compile()

Принимает исходный код в качестве аргумента и возвращает объект кода, который легко доступен для выполнения.

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

Теперь давайте подробно разберемся со списком параметров.

Параметры

  • source (обязательно): это исходный код или байтовая строка, которую нужно скомпилировать.
  • filename (Обязательно): это имя файла, содержащего «источник». Если нет, мы можем ввести имя для исходного кода.
  • mode (обязательно): это режим, в котором будет скомпилирован исходный код. Эти три режима:
  1. eval: этот режим используется, когда исходным кодом является одно выражение для компиляции.
  2. single: используется, когда источник содержит один интерактивный оператор.
  3. exec: этот режим используется, когда источник содержит блок операторов для выполнения.
  • flags : значение по умолчанию 0.
  • dont_inherit : определяет поток выполнения. Значение по умолчанию неверно.
  • Optimize : значение по умолчанию -1.

Примеры

В приведенном ниже примере мы передали одну переменную var = 10 в качестве исходного кода функции. Кроме того, мы использовали «одиночный режим» для компиляции и выполнения источника, переданного в список аргументов.

var = 10 compile_obj = compile('var', 'Value', 'single') exec(compile_obj)

Используя функцию compile(), создается объект кода, связанный с переданным исходным кодом. Затем функция exec() используется для динамической компиляции объекта кода.

Теперь мы передали одно выражение для выполнения compile() и, таким образом, здесь используется «режим eval».

action = 'print(100)' compile_obj = compile(action, 'Display', 'eval') exec(compile_obj)

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

action = 'x = 15\ny =10\nproduct=x*y\nprint("Product of x and y EnlighterJSRAW" data-enlighter-language="python">Product of x and y = 150

Источник

Оцените статью