在使用Python解释器时,是否使用了编译器?

在使用Python解释器时,是否使用了编译器?,python,compilation,language-agnostic,interpreter,Python,Compilation,Language Agnostic,Interpreter,里面写着 Python是一种动态的解释(字节码编译)语言 我知道什么是解释器,也知道什么是字节码,但这两者似乎并不适合。在它变得更加清晰之后,基本上Python源代码在解释之前是自动编译的;但也出现了一些新问题 使用时是否不进行编译?如果是,什么时候?例如,如果您只是在命令行中键入代码,并且每次按enter键时它都会运行,那么编译器什么时候有机会执行其工作 同样在上面的链接问题中,@delnan给出了编译器的一个相当广泛的定义 更一般地说,编译器是一种在计算机中转换程序的程序 将一种编程语言转换

里面写着

Python是一种动态的解释(字节码编译)语言

我知道什么是解释器,也知道什么是字节码,但这两者似乎并不适合。在它变得更加清晰之后,基本上Python源代码在解释之前是自动编译的;但也出现了一些新问题

使用时是否不进行编译?如果是,什么时候?例如,如果您只是在命令行中键入代码,并且每次按enter键时它都会运行,那么编译器什么时候有机会执行其工作

同样在上面的链接问题中,@delnan给出了编译器的一个相当广泛的定义

更一般地说,编译器是一种在计算机中转换程序的程序 将一种编程语言转换为另一种编程语言中的程序 语言…JIT编译器在运行时编译为本机代码


我想我的问题是:解释器和自动编译器有什么区别?稍微细化一下这个问题,如果编译了Python,为什么不一直编译到机器代码(或者汇编,因为我知道编写能够生成纯机器代码的编译器很困难)?

也许最好忘记语义,试着了解一下Cpython实际上在做什么。当您调用Cpython二进制文件时,它会执行许多操作。一般来说,您可以期望它将您编写的代码翻译成一系列代码。这是人们有时会参考python代码的“编译”阶段。与手工编写的代码相比,这是一种更简洁、更有效的方法来告诉解释器要做什么。python通常会将这些文件缓存在
.pyc
文件中以供重用(仅当关联的
.py
文件较新时才会重新生成)。您可以将python字节码视为python虚拟机可以运行的一组指令——在很多方面,它与Java的指令并没有太大的不同。当人们谈到编译语言时(例如,
C
),编译器的工作是将代码翻译成一组指令,直接在计算机硬件上运行。像Cpython和Java这样的语言有一个额外的间接层(例如虚拟机)。虚拟机直接在计算机硬件上运行,并负责解释特定于域的语言


与标准的“编译”语言(例如
C
Fortran
)相比,这个阶段非常轻量级——python并没有像“传统”编译器那样做很多检查(例如,类型检查)。它几乎只检查语法,并使用进行了一些非常简单的优化。

你说的自动编译器是什么意思?@igon well我红色Python有一个编译器,但我在创建用Python编写的程序时肯定明确使用了它。“Python有一个编译器!你只是没有注意到它,因为它是自动运行的。”来自。我想说的是,这和翻译不一样吗?