根据我的理解:

解释型语言是一种高级语言,由解释器(将高级语言转换为机器代码并执行的程序)运行并执行;它每次处理一点点程序。

编译语言是一种高级语言,其代码首先由编译器(将高级语言转换为机器代码的程序)转换为机器代码,然后由执行器(另一个运行代码的程序)执行。

如果我的定义错了,请指正。

现在回到Python,我对此有点困惑。你知道Python是一种解释性语言,但它被解释为一些中间代码(如字节码或IL),而不是机器代码。那么,哪个程序执行IM代码呢?请帮助我了解Python脚本是如何处理和运行的。


当前回答

在我看来,Python被归入解释器类别,因为它被设计成能够完全处理(从Python代码到在cpu中执行)单个Python语句。也就是说,你写了一个语句,你可以执行它,如果没有错误,然后得到相应的结果。

Having an intermediate code (like bytecode) i believe doesnt make difference to categorize it overall as compiler. Though this component (intermediate code generation) is typically been part of compiler but it can also be used in interpreters. See wiki definition of interpreter https://en.m.wikipedia.org/wiki/Interpreter_(computing). Its a crucial piece to add efficiency in terms of execution speed. With cache its even more powerful so that if you havent changed code in current program scope you skip heavy processing steps like lexical, semantic analysis and even some of code optimization.

其他回答

在我看来,Python被归入解释器类别,因为它被设计成能够完全处理(从Python代码到在cpu中执行)单个Python语句。也就是说,你写了一个语句,你可以执行它,如果没有错误,然后得到相应的结果。

Having an intermediate code (like bytecode) i believe doesnt make difference to categorize it overall as compiler. Though this component (intermediate code generation) is typically been part of compiler but it can also be used in interpreters. See wiki definition of interpreter https://en.m.wikipedia.org/wiki/Interpreter_(computing). Its a crucial piece to add efficiency in terms of execution speed. With cache its even more powerful so that if you havent changed code in current program scope you skip heavy processing steps like lexical, semantic analysis and even some of code optimization.

答案取决于使用的是哪种python实现。如果你正在使用CPython (python的标准实现)或Jython(用于与java编程语言集成),它首先被翻译成字节码,并根据你正在使用的python实现,这个字节码被定向到相应的虚拟机进行解释。PVM (Python虚拟机)用于CPython, JVM (Java虚拟机)用于Jython。

但假设你使用的是PyPy,这是另一个标准的CPython实现。它将使用即时编译器。

如果(你懂Java) { Python代码像java一样被转换成字节码。 每次您尝试访问该字节码时,都会再次执行它。 }其他{ Python代码最初被翻译成一种叫做字节码的东西 接近机器语言,但不是真正的机器代码 因此,每次我们访问或运行它时,字节码都会再次执行 }

对于新手

在运行脚本之前,Python会自动将脚本编译为已编译的代码,即所谓的字节代码。

运行脚本不被认为是导入,也不会创建.pyc。

例如,如果你有一个脚本文件abc.py,它导入了另一个模块xyz.py,当你运行abc.py时,xyz.py, xyz.py。Pyc将被创建,因为xyz被导入,但没有abc。Pyc文件将被创建,因为abc.py没有被导入。

几乎,我们可以说Python是一种解释型语言。但是我们在python中使用了一次性编译过程的一部分,将完整的源代码转换为类似java语言的字节码。