¿Se compila o interpreta Python o ambos?

Para responder a su pregunta – Err, en su mayoría no realmente (?) :-). Los idiomas compilados tradicionalmente convierten su código legible por humanos en código de máquina, una cadena de números binarios que el sistema operativo y la CPU luego “ejecutan”.

Si su idioma es interpretado, significa que su idioma está en una representación que no es de código de máquina para el momento en que se ejecuta, y tiene otra capa que lo atraviesa línea por línea. El CPython tradicional convierte su Python fácil de usar en el código de bytes de Python, que luego el intérprete recorre línea por línea.

La situación taxonómica se vuelve más complicada una vez que empiezas a hablar de JIT’ing, como lo están haciendo Unladen-Swallow (y Parrot), y como lo hará CPython muy pronto. Las secciones de bytecode se convierten a pedido en código máquina y se ejecutan adecuadamente. ¿JIT’ing algún idioma lo convierte en un lenguaje compilado? En realidad no, pero la distinción se vuelve más confusa aquí.

En conclusión: este es un debate filosófico sobre taxonomías que se va haciendo cada vez más confuso a medida que pasa el tiempo 🙂

Te parece extraño porque la pregunta no tiene sentido. No hay una distinción real entre un “lenguaje compilado” y un “lenguaje interpretado”. Si una implementación de lenguaje en particular funciona por compilación o interpretación es simplemente una decisión de implementación, porque cualquier lenguaje puede implementarse de cualquier manera.

Incluso entonces, no hay una línea clara entre los dos. Muchas implementaciones de lenguaje “interpretado” hoy en día, como CPython, evalúan el código de bytes para una máquina virtual, no un árbol de sintaxis abstracta. En ese sentido, en realidad compilan el código fuente al código de objeto (máquina virtual) tanto como, por ejemplo, Java. Algunos incluso almacenan en caché una versión serializada del código de bytes en el sistema de archivos. Por supuesto, es posible traducir bytecode a código de máquina nativo ya sea en lotes o sobre la marcha, e incluso puede ejecutar código nativo en una máquina diferente utilizando un intérprete.

Puede haber algunas cosas que hace una implementación que consideraríamos una compilación seria : cuando traduce código a un idioma con una semántica significativamente diferente al lenguaje fuente y realiza optimizaciones significativas, eso suena como compilación. Pero hay un continuo en general, y generalmente no es una distinción útil para hacer.

Es común que los principiantes tengan como Pregunta.

La respuesta es “Python es un lenguaje interpretado”.

En python, ya sea que se use el modo interactivo o script, se lleva a cabo la ejecución línea por línea.
@ ¿Se interpreta o compila Python?

C es un lenguaje basado en compilador, ya que después de la compilación, da como resultado un código de máquina. Este código de byte es específico de la máquina.
Por otro lado, Python es un lenguaje basado en intérpretes. Aunque crea archivos .pyc, cuando se importa o ejecuta con la función py_compile (), genera un código de bytes compilado. Este código de byte es específico de Python y no específico de la máquina.
Esta es la razón principal de la independencia de la plataforma para Python.

PD:
Y, hay otro debate entre si los programas de Python funcionan en un intérprete o en una máquina virtual (Python VM). No quiero confundirte … haz otra pregunta. Yo responderé a eso.