Para ejecutar di­re­c­ta­me­n­te líneas in­di­vi­dua­les de código o un bloque de código y guardar el resultado en una variable, puedes utilizar la función de co­m­pi­la­ción de Python, que devuelve un objeto de código que puedes ejecutar.

Posibles apli­ca­cio­nes

Si no quieres ejecutar se­n­te­n­cias de código in­di­vi­dua­les di­re­c­ta­me­n­te en Python, sino solo asi­g­nar­las a una variable, puedes utilizar la función Python compile. Se utiliza para convertir el código fuente en código objeto y devuelve un objeto que luego puedes ejecutar uti­li­za­n­do Python exec. También puedes pasar un archivo a la función de co­m­pi­la­ción de Python para extraer el código fuente.

Consejo

¿Utilizas Python como lenguaje de pro­gra­ma­ción para tu proyecto web? Deploy Now de IONOS te ayudará a trabajar de forma aún más eficiente pe­r­mi­tié­n­do­te desplegar tus páginas web a través de GitHub en cualquier momento. Gracias a la vista previa en tiempo real puedes ver el estado actual de tu proyecto en directo, en cualquier momento y con solo unos clics.

Sintaxis de Python compile

Se puede llamar a la función de Python compile con hasta seis pa­rá­me­tros di­fe­re­n­tes, aunque solo los tres primeros son obli­ga­to­rios. El resto puede ajustarse como se desee para es­pe­ci­fi­car el co­m­po­r­ta­mie­n­to de la función.

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

Tener una visión general de los pa­rá­me­tros in­di­vi­dua­les ayuda a entender la función de co­m­pi­la­ción.

Parámetro Opcional De­s­cri­p­ción
source no Aquí indicas lo que quieres compilar. Suelen ser strings, pero también puedes añadir objetos byte u objetos AST.
filename no En este punto, señala el archivo fuente del objeto que se va a compilar. Si no hay archivo, puedes escribir lo que quieras. El parámetro debe seguir ajustado.
mode no En el parámetro mode, es­pe­ci­fi­ca cómo debe rea­li­zar­se la co­m­pi­la­ción. Puedes elegir entre los si­guie­n­tes valores:
  • eval: se evalúan las ex­pre­sio­nes in­di­vi­dua­les.
  • exec: se evalúan los bloques de código.
  • single: se usa con de­cla­ra­cio­nes in­di­vi­dua­les e in­ter­ac­ti­vas.
flags sí Aquí puedes indicar exac­ta­me­n­te cómo debe co­m­pi­lar­se el código fuente. Sin embargo, para la inmensa mayoría de las apli­ca­cio­nes, puedes ignorar flag.
dont_inherit sí Al igual que flag, el parámetro dont_inherit se utiliza para es­pe­ci­fi­car la co­m­pi­la­ción de tu fuente.
optimize sí En el parámetro optimize puedes de­te­r­mi­nar el nivel de op­ti­mi­za­ción de tu proceso de co­m­pi­la­ción.

Apli­ca­ción de la Python compile

Para vi­sua­li­zar cómo funciona Python compile, es útil un ejemplo de código:

codeAsString = 'x = 10\ny = 7\nres = x * y\nprint("result = ", res)'
codeObject = compile(codeAsString, ' ', 'exec')
exec(codeObject)
python

Primero, define la variable llamada co­deA­s­S­tri­ng, en la que se almacena el siguiente código Python simple como Python string:

x = 10
y = 7
res = x * y
print("result = ", res)
python

Que no te confundan las “\n” que aparecen en una cadena co­deA­s­S­tri­ng: se trata del carácter de control que marca un salto de línea. Como ves, puedes si­m­ple­me­n­te almacenar tu código Python como una cadena en una variable co­n­ve­n­cio­nal. Sin embargo, para que el código no se in­te­r­pre­te si­m­ple­me­n­te como una cadena, necesitas la función compile. La llamada a la función compile del ejemplo anterior solo utiliza los pa­rá­me­tros ne­ce­sa­rios.

Primero, introduce lo que se va a compilar, es decir, tu cadena. A co­n­ti­nua­ción, es­pe­ci­fi­ca el archivo fuente de tu cadena. Aunque en teoría puedes utilizar cualquier cadena de tu elección, como esta cadena se definió di­re­c­ta­me­n­te en el código y no se leyó de un archivo, en este caso basta con es­pe­ci­fi­car la cadena vacía.

El último parámetro vuelve a ser in­te­re­sa­n­te: la cadena co­deA­s­S­tri­ng es un bloque entero de código, como muestra la re­so­lu­ción de la cadena en el segundo ejemplo de código, así que se utiliza el parámetro exec. Recuerda que se trata de una cadena y no olvides las comillas.

El resultado de la función Python compile se asigna a la variable llamada co­deO­b­je­ct en el ejemplo de código anterior, que contiene exac­ta­me­n­te lo que su nombre indica: un objeto código. Lo especial de un objeto código es que puedes eje­cu­tar­lo en cualquier momento con una llamada a la función exec de Python. Esto es exac­ta­me­n­te lo que ocurre en la última línea de código, de modo que el programa mostrará “resultado = 70” al final.

Compilar una sola in­s­tru­c­ción

Si solo quieres compilar una única sentencia de código, debes ajustar el tercer parámetro al llamar a la función de Python compile. Esto se debe a que el modo eval se utiliza para se­n­te­n­cias in­di­vi­dua­les. Descubre un ejemplo de este uso:

singleInstruction = 'print("Hello World!")'
codeObject = compile(singleInstruction, ' ', 'eval')
exec(codeObject)
python

En este ejemplo no hay muchos cambios. Se sigue creando un string con código Python. Sin embargo, a di­fe­re­n­cia del ejemplo anterior, en este caso el string solo contiene una única in­s­tru­c­ción print de Python que requiere el uso del modo eval y se utiliza para evaluar in­s­tru­c­cio­nes in­di­vi­dua­les.

Si ahora vuelves a ejecutar tu objeto código uti­li­za­n­do la función exec, verás que todo funciona como esperabas. Tu programa mostrará “¡Hola Mundo!” en la pantalla.

Procesar código fuente a partir de fuentes de archivos

En los ejemplos pre­se­n­ta­dos hasta ahora, siempre se ha definido el código fuente que debe procesar la función de Python compile como una cadena del propio programa. Pero ¿y si tienes un archivo que contiene código que quieres ejecutar en tu programa? Para ello también puedes utilizar Python compile.

Supón que tienes un archivo llamado testcode.py que contiene un código Python eje­cu­ta­ble y quieres eje­cu­tar­lo en tu programa:

tmpFile = open('testcode.py', 'r')
tmpCode = tmpFile.read()
tmpFile.close()
codeObject = compile(tmpCode, 'testcode.py', 'exec')
exec(codeObject)
python

Primero tienes que leer el código que quieres ejecutar del archivo en el que se encuentra ac­tua­l­me­n­te. Para ello, abre el archivo con la función open de Python y con acceso de lectura. Luego puedes utilizar Python read para leer el código fuente en tu variable llamada tmpCode y cerrar el archivo que abriste al principio.

Ahora sigue la llamada a Python compile. En este punto es im­po­r­ta­n­te que indiques de dónde has sacado el código que quieres compilar, en este caso del archivo testcode.py. Nuestro programa se parece entonces a los ejemplos an­te­rio­res, y con la llamada final a exec ejecutas fi­na­l­me­n­te el código de testcode.py en tu programa.

Ir al menú principal