根据我的理解:

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

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

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

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


当前回答

根据Python官方网站,它是解释的。

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

Python是一种解释性的、面向对象的高级编程语言……

...

因为没有编译步骤…

...

Python解释器和广泛的标准库是可用的…

...

相反,当解释器发现错误时,它会引发 例外。当程序没有捕获异常时, 解释器输出堆栈跟踪。

其他回答

根据Python官方网站,它是解释的。

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

Python是一种解释性的、面向对象的高级编程语言……

...

因为没有编译步骤…

...

Python解释器和广泛的标准库是可用的…

...

相反,当解释器发现错误时,它会引发 例外。当程序没有捕获异常时, 解释器输出堆栈跟踪。

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

Python(解释器)被编译。

证明:它甚至不会编译你的代码,如果它包含语法错误。

示例1:

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

输出:

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

代码编译成功。第一行执行(打印),第二行抛出ZeroDivisionError(运行时错误)。

示例2:

print("This should not print")
/0         

输出:

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

结论:如果代码文件包含SyntaxError,编译失败时什么都不会执行。

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

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

As sone one already said, "interpreted/compiled is not a property of the language but a property of the implementation." Python can be used in interpretation mode as well as compilation mode. When you run python code directly from terminal or cmd then the python interpreter starts. Now if you write any command then this command will be directly interpreted. If you use a file containing Python code and running it in IDE or using a command prompt it will be compiled first the whole code will be converted to byte code and then it will run. So it depends on how we use it.