Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python built-in function "compile". What is it used for?

I came across a built-in function compile today. Though i read the documentation but still do not understand it's usage or where it is applicable. Please can anyone explain with example the use of this function. I will really appreciate examples.

From the documentation, the function takes some parameters as shown below.

compile(source, filename, mode[, flags[, dont_inherit]]) 
like image 719
demo.b Avatar asked Mar 16 '14 22:03

demo.b


People also ask

What is the use of compile function in Python?

The compile() function returns the specified source as a code object, ready to be executed.

What does it mean to compile in Python?

Compilation involves translating your human understandable code to machine understandable code, or Machine Code. Machine code is the base level form of instructions that can be directly executed by the CPU. Upon successful compilation, your code generates an executable file.

Do I need to compile a Python script?

python is an interpreted language, so you don't need to compile your scripts to make them run. The easiest way to get one running is to navigate to it's folder in a terminal and execute "python somefile.py".

How do you use compile?

Examples of compile in a SentenceHe compiled a book of poems. She compiled a list of names. They took the best submissions and compiled them in a single issue of the magazine. We compiled our findings in the report.


2 Answers

It is not that commonly used. It is used when you have Python source code in string form, and you want to make it into a Python code object that you can keep and use. Here's a trivial example:

>>> codeobj = compile('x = 2\nprint "X is", x', 'fakemodule', 'exec') >>> exec(codeobj) X is 2 

Basically, the code object converts a string into an object that you can later call exec on to run the source code in the string. (This is for "exec" mode; the "eval" mode allows use of eval instead, if the string contains code for a single expression.) This is not a common task, which is why you may never run across a need for it.

The main use for it is in metaprogramming or embedding situations. For instance, if you have a Python program that allows users to script its behavior with custom Python code, you might use compile and exec to store and execute these user-defined scripts.

Another reason compile is rarely used is that, like exec, eval, and their ilk, compile is a potential security hole. If you take user code in string form and compile it and later exec it, you could be running unsafe code. (For instance, imagine that in my example above the code was formatYourHardDrive() instead of print x.)

like image 174
BrenBarn Avatar answered Sep 18 '22 14:09

BrenBarn


compile is a lower level version of exec and eval. It does not execute or evaluate your statements or expressions, but returns a code object that can do it. The modes are as follows:

  1. compile(string, '', 'eval') returns the code object that would have been executed had you done eval(string). Note that you cannot use statements in this mode; only a (single) expression is valid. Used for a single expression.
  2. compile(string, '', 'exec') returns the code object that would have been executed had you done exec(string). You can use any number of statements here. Used for an entire module.
  3. compile(string, '', 'single') is like the exec mode, but it will ignore everything except for the first statement. Note that an if/else statement with its results is considered a single statement. Used for one single statement.

Take a look that the documentation. There is also an awesome (well, dumbed down) explanation at http://joequery.me/code/python-builtin-functions/#compile with an excellent example of usage.

like image 45
anon582847382 Avatar answered Sep 17 '22 14:09

anon582847382