round español built python built-in

español - Función incorporada de Python "compilar". ¿Para qué se usa esto?



round python español (3)

Me encontré con una función incorporada compile hoy. Aunque leí la documentación pero aún no entiendo su uso o dónde es aplicable. Por favor, ¿alguien puede explicar con el uso de esta función? Realmente apreciaré ejemplos.

De la documentación, la función toma algunos parámetros como se muestra a continuación.

compile(source, filename, mode[, flags[, dont_inherit]])


¿Qué no entiendes específicamente? La documentación explica que:

Compilar la fuente en un código u objeto AST. Los objetos de código pueden ejecutarse mediante una sentencia exec o evaluarse mediante una llamada a eval() . la fuente puede ser una cadena Unicode, una cadena codificada Latin-1 o un objeto AST. Consulte la documentación del módulo ast para obtener información sobre cómo trabajar con objetos AST.

Así que toma el código de Python, y regresa de esas dos cosas

  • exec ejecutará el código python
  • eval evaluará una expresión, que es menos funcional que exec
  • ast permite navegar por el árbol de sintaxis abstracta que genera el código

No es de uso común. Se utiliza cuando tiene el código fuente de Python en forma de cadena y desea convertirlo en un objeto de código de Python que puede conservar y usar. Aquí hay un ejemplo trivial:

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

Básicamente, el objeto de código convierte una cadena en un objeto al que más tarde puede llamar exec para ejecutar el código fuente en la cadena. (Esto es para el modo "exec"; el modo "eval" permite el uso de eval lugar, si la cadena contiene código para una sola expresión). Esta no es una tarea común, por lo que es posible que nunca se encuentre con una necesidad. .

Su uso principal es en situaciones de metaprogramación o incrustación. Por ejemplo, si tiene un programa Python que permite a los usuarios escribir su comportamiento con código Python personalizado, puede usar compile y exec para almacenar y ejecutar estos scripts definidos por el usuario.

Otra razón por la que la compile rara vez se usa es que, como exec , eval y su tipo, compile es un posible agujero de seguridad. Si toma el código de usuario en forma de cadena y lo compila y luego lo ejecuta, podría estar ejecutando código no seguro. (Por ejemplo, imagine que en mi ejemplo anterior el código fue formatYourHardDrive() lugar de print x ).


compile es una versión de nivel inferior de exec y eval . No ejecuta ni evalúa sus declaraciones o expresiones, pero devuelve un objeto de código que puede hacerlo. Los modos son los siguientes:

  1. compile(string, '''', ''eval'') devuelve el objeto de código que se habría ejecutado si usted hubiera hecho eval(string) . Tenga en cuenta que no puede usar sentencias en este modo; solo una expresión (única) es válida. Utilizado para una sola expresión.
  2. compile(string, '''', ''exec'') devuelve el objeto de código que se habría ejecutado si usted hubiera ejecutado exec(string) . Puede utilizar cualquier número de declaraciones aquí. Utilizado para un módulo completo.
  3. compile(string, '''', ''single'') es como el modo exec , pero ignorará todo excepto la primera instrucción. Tenga en cuenta que una declaración if / else con sus resultados se considera una sola declaración. Utilizado para una sola declaración.

Echa un vistazo a la documentation . También hay una explicación impresionante (bueno, sin sentido) en http://joequery.me/code/python-builtin-functions/#compile con un excelente ejemplo de uso.