Python而不是被解释显示编译的行为

时间:2015-12-27 10:20:53

标签: python compilation interpreter

我已经读过python是一种脚本语言,它的执行引擎包含一个解释器,它逐个执行每行代码。
我有一个简单的python代码as-

print("1")
print("2")
print("3")
print("4)

这里第4行打印(“4”包含错误(缺少结束引号)。当我运行此程序时,只是在第4行中出现错误,告诉我语法错误。

我的问题是由于python被解释而不是编译,因此输出不应该是

1
2
3
Syntax error in line 4

但它直接给我一个错误信息,没有任何输出第1,2和3行就像任何其他编译语言,如Java,C和C ++左边我是python的新手,请解释。

1 个答案:

答案 0 :(得分:3)

认识到Python代码首先被编译成称为字节代码的中间形式非常重要。然后由Python解释器执行该字节代码。它类似于Java的编译/执行周期,如果您熟悉它,尽管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