Python 而不是被解释显示编译行为
Python instead of being interpreted shows compiled behaviour
我读到 python 是一种脚本语言,它的执行引擎由解释器组成,逐行执行每一行代码。
我有一个简单的 python代码为-
print("1")
print("2")
print("3")
print("4)
这里第 4 行 print("4) 包含一个错误(缺少结尾引号)。当我 运行 这个程序然后简单地得到一个错误,告诉我第 4 行中的语法错误。
我的问题是,由于 python 被解释而不是编译,那么输出不应该是
1
2
3
Syntax error in line 4
但它直接给我一条错误消息,第 1、2 和 3 行没有任何输出,就像 Java、C 和 C++ 等任何其他编译语言一样
我是 python,请解释。
重要的是要认识到 Python 代码首先被编译成称为字节码的中间形式。该字节码随后由 Python 解释器执行。它类似于 Java 的 compilation/execution 循环,如果你熟悉的话,虽然 Python 可以立即执行编译后的代码。字节码不等同于硬件可以直接执行的机器码,它是更高层次的。
在Python中,编译单元是模块,它通常对应于整个文件,而不是单个语句。
因此您的示例中的第 4 行将与前面的行一起编译,并且第 4 行中的语法错误阻止执行开始。
你可以通过反汇编一个函数来感受一下字节码是什么样子的:
import dis
def f():
print("1")
print("2")
print("3")
dis.dis(f)
输出
2 0 LOAD_CONST 1 ('1')
3 PRINT_ITEM
4 PRINT_NEWLINE
3 5 LOAD_CONST 2 ('2')
8 PRINT_ITEM
9 PRINT_NEWLINE
4 10 LOAD_CONST 3 ('3')
13 PRINT_ITEM
14 PRINT_NEWLINE
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
我读到 python 是一种脚本语言,它的执行引擎由解释器组成,逐行执行每一行代码。
我有一个简单的 python代码为-
print("1")
print("2")
print("3")
print("4)
这里第 4 行 print("4) 包含一个错误(缺少结尾引号)。当我 运行 这个程序然后简单地得到一个错误,告诉我第 4 行中的语法错误。
我的问题是,由于 python 被解释而不是编译,那么输出不应该是
1
2
3
Syntax error in line 4
但它直接给我一条错误消息,第 1、2 和 3 行没有任何输出,就像 Java、C 和 C++ 等任何其他编译语言一样
我是 python,请解释。
重要的是要认识到 Python 代码首先被编译成称为字节码的中间形式。该字节码随后由 Python 解释器执行。它类似于 Java 的 compilation/execution 循环,如果你熟悉的话,虽然 Python 可以立即执行编译后的代码。字节码不等同于硬件可以直接执行的机器码,它是更高层次的。
在Python中,编译单元是模块,它通常对应于整个文件,而不是单个语句。
因此您的示例中的第 4 行将与前面的行一起编译,并且第 4 行中的语法错误阻止执行开始。
你可以通过反汇编一个函数来感受一下字节码是什么样子的:
import dis
def f():
print("1")
print("2")
print("3")
dis.dis(f)
输出
2 0 LOAD_CONST 1 ('1') 3 PRINT_ITEM 4 PRINT_NEWLINE 3 5 LOAD_CONST 2 ('2') 8 PRINT_ITEM 9 PRINT_NEWLINE 4 10 LOAD_CONST 3 ('3') 13 PRINT_ITEM 14 PRINT_NEWLINE 15 LOAD_CONST 0 (None) 18 RETURN_VALUE