De mi entendimiento:

Un interpretado lenguaje es un lenguaje de alto nivel de ejecución y ejecutado por un intérprete (un programa que convierte el lenguaje de alto nivel a código máquina y, a continuación, ejecutar) sobre la marcha, los procesos de ti el programa poco a poco.

Un compilado lenguaje es un lenguaje de alto nivel cuyo código se convierte en máquina-código, un compilador (programa que convierte el lenguaje de alto nivel a código máquina) y, a continuación, ejecutado por un albacea (otro programa para ejecutar el código).

Me corrija si mi definiciones están equivocados.

Ahora, volviendo a Python, estoy poco confundido acerca de esto. En todas partes se entera de que Python es un lenguaje interpretado, pero es interpretado a algunas código intermedio (como el byte-code o IL) y no para el código máquina. De modo que el programa, a continuación, ejecuta el IM código? Por favor, ayúdame a entender cómo una secuencia de comandos de Python que se maneja y ejecuta.

  • posibles duplicados de ¿Python Es interpretado (como Javascript o PHP)?
  • Python hace crear .pyc archivos (llamados byecode) siempre que una biblioteca es importado. AFAIK el bytecode sólo puede acelerar los tiempos de carga, no de los tiempos de ejecución.
  • El almacenamiento en caché el bytecode en .pyc archivos de sólo acelera la carga de hecho, pero sólo becase el código de Python es compilado a código de bytes antes de la ejecución de todos modos. Aunque creo que no ha sido tratado con Python específicamente, otros idioma, implementaciones muestran que el bytecode es de hecho más fácil de interpretar de manera eficiente que una simple AST o, peor aún, analizar el código fuente. Mayores Ruby versiones interpretadas desde AST, por ejemplo, y fue AFAIK superó un poco por las nuevas versiones que se compilan a bytecode.
  • No quiero parecer descortés, pero no es eso lo que yo quería decir (pero no tan informado como usted)?
  • No sé lo que quiso decir. Sólo sé que tu comentario no era incorrecta, pero siempre un buen oppoturnity para un poco de información por qué sólo acelera el tiempo de carga, así que me decidí a añadir esa información. Sin ánimo de ofender significaba o tomado 🙂
  • Con respecto a su definición de «Compilado:» Algunos programas no requieren de un Albacea. Por ejemplo, los programas en C se compilan directamente a código máquina, el cual puede ser ejecutado directamente.
  • ¿Python Es interpretado o compilado? Sí.

10 Comentarios

  1. 205

    Primero, interpretado/compilado no es una propiedad de la lengua, sino una propiedad de la aplicación. Para la mayoría de los idiomas, la mayoría, si no todas las implementaciones de caer en una categoría, así que uno podría guardar un par de palabras diciendo que el lenguaje es interpretado/compilado demasiado, pero aún así es una distinción importante, porque ayuda a comprender y debido a que hay muy pocos idiomas útil de las implementaciones de ambos tipos (principalmente en el ámbito de los lenguajes funcionales, a ver Haskell y ML). Además, hay C intérpretes y proyectos que intento compilar un subconjunto de Python a C o C++ de código (y posteriormente a código máquina).

    Segundo, la compilación no se limita a futuro-de-tiempo de compilación en código máquina nativo. Un compilador es, en general, un programa que convierte un programa en un lenguaje de programación en un programa en otro lenguaje de programación (podría decirse, incluso puede tener un compilador con la misma entrada y salida de lenguaje significativo si se aplican las transformaciones). Y compiladores JIT compilar a código máquina nativo en tiempo de ejecución, que puede dar a una velocidad muy cerca o incluso mejor que antes de tiempo de compilación (dependiendo del punto de referencia y la calidad de las implementaciones de comparación).

    Pero deje de molestia y responder a la pregunta que te quería preguntar: Prácticamente (leer: el uso de un algo popular y madura de la aplicación), Python es compilado. No se compila a código máquina antes de tiempo (es decir, «compilado» por el restringido y el mal, pero por desgracia definición común), «sólo», compilado a código de bytes, pero aún así compilación con al menos algunos de los beneficios. Por ejemplo, la declaración de a = b.c() es compilado a un flujo de bytes que, cuando se «desmonta», parece algo así como load 0 (b); load_str 'c'; get_attr; call_function 0; store 1 (a). Esto es una simplificación, que en realidad es menos legible y un poco más bajo nivel – usted puede experimentar con la biblioteca estándar de dis módulo y ver cuál es la oferta real se parece. La interpretación de este es más rápido que la interpretación de un mayor nivel de representación.

    Que bytecode es interpretado (tenga en cuenta que hay una diferencia, tanto en la teoría y en la práctica, rendimiento, entre la interpretación directa y de primera compilación de algunos intermedio de la representación y la interpretación de esa), como con la implementación de referencia (CPython), o interpretado y compilado a la máquina optimizado el código en tiempo de ejecución, como con PyPy.

    • Bien, esto significa que una secuencia de comandos de python es la primera compilan a bytecode y, a continuación, se lleva a cabo mediante un intérprete como CPython, Jython o IronPython etc.
    • De hecho. En principio, Python es como mucho de un lenguaje compilado como Java y los diversos .NET languages 😉 (ya que PyPy proporciona una útil en la práctica JIT compiler.)
    • No, se compila a bytecode y, a continuación, el bytecode es ejecutado por los respectivos VM. CPython es el compilador y la máquina virtual, pero Jython y IronPython son sólo el compilador.
    • Yo no tengo mucha experiencia con IronPython/Jython, pero no, al menos, Jython proporcionar un intérprete-como capa? Yo no creo que es factible que se trate de girar a la de Python en la estáticamente tipado JVM bytecode. Aún así, buen punto sobre el compilador y el intérprete parte de un mismo paquete.
    • Gracias compañero, es porque de chicos como u y skeet, la primera elección de foro es ASÍ.
    • +1 «…una propiedad de la implementación». Yo habría dicho que «permite un shell interactivo»
    • estaba leyendo el Jython, IronPython y encontró la misma cosa. Gracias por la aclaración entre compilador, VM y tanto 😉
    • Bueno, Jython hace actuar como una especie de intermediario entre el lenguaje Python y Java VM, pero compila a bytecode de Java.
    • Tienes toda la razón, algunos agradable charla fue sobre él en la PyCon 2016 : youtube.com/watch?v=mxjv9KqzwjI

  2. 28

    La CPU sólo puede entender el código de la máquina, de hecho. Para interpretar el programa, el objetivo final de los servicios de un intérprete para «interpretar» el código del programa en código máquina. Sin embargo, por lo general un moderno lenguaje interpretado no interpretar humanos código directamente porque es demasiado ineficiente.

    El intérprete de Python que lea primero los humanos código y optimizarlo para algunos inmediata de código antes de interpretar en código máquina. Es por eso que siempre se necesita otro programa para ejecutar una secuencia de comandos de Python, a diferencia de C++ puede ejecutar el archivo ejecutable directamente. Por ejemplo c:\Python27\python.exe o /usr/bin/python.

    • Me gusta el punto sobre la «necesidad de otro programa para ejecutar [se]». Que ayudó a aclarar algunas de mis pensamientos.
    • así python.exe primero optimiza el código y luego lo interpreta?
    • cuando python.exe se da a texto legible por humanos código fuente, primero se produce optimizado código de bytes, entonces se interpreta que (como usted dice); sin embargo, cuando ya existe un código de bytes del archivo (pre-compilado), no tiene que hacer el primer paso, que ahorra algo de tiempo.
  3. 25

    La respuesta depende de lo que la implementación de python está siendo utilizado. Si usted está usando digamos CPython (La implementación Estándar de python) o Jython (Dirigida para la integración con el lenguaje de programación java)que se traduce primero en bytecode, y dependiendo de la implementación de python está utilizando, este bycode se dirige a la máquina virtual correspondiente para la interpretación. PVM (Máquina Virtual de Python) para CPython y JVM (Java Virtual Machine) para Jython.

    Pero digamos que usted está usando PyPy que es otro estándar de CPython aplicación. Se podría utilizar un Just-In-Time Compiler.

    • Esta es la respuesta más apropiada a la pregunta.
    • Durante la traducción a código de bytes se hace necesario un compilador que es?
  4. 9

    De acuerdo a python.org es un intérprete.

    https://www.python.org/doc/essays/blurb/

    Python es interpretado, orientado a objetos, de alto nivel lenguaje de programación…

    Ya que no hay paso de compilación …

    El intérprete de Python y la extensa biblioteca estándar están disponibles…

    Lugar, cuando el intérprete descubre un error, se plantea una
    excepción. Cuando el programa no detecta la excepción, la
    intérprete imprime un seguimiento de la pila.

  5. 4

    Si sabes Java ) {

    El código de Python se convierte en código de bytes de java hace.

    Que el código se ejecuta de nuevo cada vez que intente acceder a él.

    } else {

    El código de Python es inicialmente traducido en algo llamado bytecode
    que es bastante
    cerca de lenguaje de máquina, pero no en código máquina

    así que cada vez que se accede o que el código se ejecuta de nuevo

    }

  6. 3

    Sí, es a la vez compilado y lenguaje interpretado. Entonces, ¿por qué nos llama generalmente es interpretada languate?

    ver cómo es a la vez compilado e interpretado?

    Primero de todo quiero decir que te va a gustar mi respuesta más si son de el mundo de Java.

    De Java, el código fuente primero se convierte a código de bytes a través de javac compilador luego se dirigió a la JVM(responsable de generar el código nativo para la ejecución de propósito). Ahora les quiero mostrar lo que llamamos el Java como lenguaje compilado, ya que podemos ver que realmente se compila el código fuente y da la .clase archivo(nada pero bytecode) a través de:

    javac Hello.java ——-> produce Hello.class archivo

    java Hola ——–>Dirigir bytecode a JVM para la ejecución de propósito

    Lo mismo sucede con python es decir, primero el código fuente se convierte a código de bytes a través del compilador luego se dirigió a la PVM(responsable de generar el código nativo para la ejecución de propósito). Ahora quiero mostrarles que habitualmente llamamos a Python como un lenguaje interpretado, porque la compilación que sucede detrás de la escena
    y cuando se ejecute el código python a través de:

    python Hello.py ——-> directamente excutes el código y podemos ver el resultado provied que el código es sintácticamente correcta

    @ python Hello.py parece que directamente ejecuta pero en realidad se genera primero el bytecode que es interpretado por el intérprete para producir el código nativo para la ejecución de propósito.

    CPython– Asume la responsabilidad tanto de la compilación e interpretación.

    Mirar en la siguiente línea si usted necesita más detalles:

    Como he mencionado que CPython compila el código fuente pero compilación real sucede con la ayuda de cython, a continuación, la interpretación que sucede con la ayuda de CPython

    Ahora vamos a hablar un poco sobre el papel de Just-In-Time compiler en Java y Python

    De la JVM de Java Intérprete existe, que interpreta el bytecode línea por línea para obtener el código máquina nativo para la ejecución de propósito, pero cuando bytecode de Java es ejecutado por un intérprete, la ejecución siempre será más lento. Entonces, ¿cuál es la solución? la solución es Just-In-Time compiler que produce el nativo de código que puede ser ejecutado de forma mucho más rápida que la que pudiera ser interpretado. Algunos JVM vendedores de uso Java Intérprete y algunas Just-In-Time compiler. Referencia: haga clic aquí

    En python para obtener alrededor de la intérprete para lograr la rápida ejecución, utilice otro implementación de python(PyPy) en lugar de CPython.
    haga clic aquí por otra implementación de python, incluyendo PyPy.

  7. 2

    Casi, podemos decir que Python es el lenguaje interpretado. Pero estamos usando alguna parte de un proceso de compilación en python para convertir el código fuente completo en byte-code como el lenguaje java.

  8. 0

    Para los novatos

    Python automáticamente compila el script de código compilado, por lo que llamó a código de bytes, antes de ejecutarlo.

    La ejecución de un script no se considera una importación y no .pyc será creado.

    Por ejemplo, si usted tiene un archivo de secuencia de comandos abc.py que las importaciones de otro módulo xyz.py cuando ejecute abc.py xyz.pyc será creado desde xyz es importado, pero no abc.pyc archivo será creado desde abc.py no está siendo importado.

  9. 0

    Python(el intérprete) es compilado.

    Prueba: Se ni siquiera compilar su código si contiene error de sintaxis.

    Ejemplo 1:

    print("This should print") 
    a = 9/0 

    De salida:

    This should print
    Traceback (most recent call last):
      File "p.py", line 2, in <module>
        a = 9/0
    ZeroDivisionError: integer division or modulo by zero

    Código se compila correctamente. Primera línea se ejecuta (print) segunda línea de tiros ZeroDivisionError (error de tiempo de ejecución) .

    Ejemplo 2:

    print("This should not print")
    /0         

    De salida:

      File "p.py", line 2
        /0
        ^
    SyntaxError: invalid syntax

    Conclusión: Si su archivo de código que contiene SyntaxError nada va a ejecutar como la compilación falla.

  10. 0

    El código python que usted escribe es compilado en python de código de bytes, que crea el archivo con la extensión .pyc. Si compila, de nuevo, la pregunta es, ¿por qué no lenguaje compilado.

    Tenga en cuenta que esta no es la compilación en el sentido tradicional de la palabra. Normalmente, diríamos que la compilación está tomando un lenguaje de alto nivel y convertirlo en código de máquina. Pero se trata de una compilación de las clases. Compilado a código intermedio no en código máquina (Esperamos que tengo Ahora).

    Posterior al proceso de ejecución, su código de bytes, presente en pyc archivo creado en el paso de compilación, a continuación, se ejecuta mediante la adecuada máquinas virtuales, en nuestro caso, la CPython VM
    El sello de tiempo (denominado como número mágico) se usa para validar si .py archivo se ha cambiado o no, dependiendo de que las nuevas pyc se crea el archivo. Si pyc es de código actual y, a continuación, simplemente se salta el paso de compilación.

Dejar respuesta

Please enter your comment!
Please enter your name here