编译型编译型or解释型?解释型?Python运行机制浅析运行机制浅析
Python语言通常被看作是解释型语言,不同于像C语言那样的编译型。但实际上,如果说Python是编译型语言,也未尝不可。
我们来一起看一下
1!
1.举个栗子举个栗子
首先看一个简单的例子:
#!/usr/bin/python3
# file name :demo1.py
a=1
b=2
print("a+b = ",a+b)
c=NotDefinedValue
print(c)
这里第四行有个赋值的错误,但python在运行前不会进行类型检查,所以该程序仍可正常运行,直至遇到错误,运行结果与预
想的一致:
a+b = 3
Traceback (most recent call last):
File "/demo.py", line 4, in
c=NotDefinedValue
NameError: name 'NotDefinedValue' is not defined
Process finished with exit code 1
现在稍微改动一下,使最后一行有个语法错误(少个括号):
#!/usr/bin/python3
# file name :demo2.py
a=1
b=2
print("a+b = ",a+b)
c=NotDefinedValue
print(c
按照对python语言的理解,程序应该会逐行执行,直至遇到第一个赋值语句的错误,然后抛出异常。执行结果应该和上面的例
子一样。是不是这样呢,我们试着执行,结果如下:
File "/demo.py", line 6
SyntaxError: unexpected EOF while parsing
可见没有像预想的一样,而是直接抛出语法错误。
那么问题来了,前三行代码没错误,为什么不能正常执行呢?python作为解释性语言,应该是“一边执行一边转换”的,后面
的“错误”按理说不会影响前面正确的代码的啊?
2 那可能有同学要说了,python在运行之前会检查语法!但“检查语法”是个怎样的过程呢?要知
道答案,需要了解python底层的运作。
2. python运行机制运行机制
我们都知道python “解释器”(interpreter)这个东西,就是负责执行python源码的,大体的过程是这样:
对于解释器内部,可以分成两部分:编译器(compiler)和虚拟机(virtual machine),编译器负责将源码编译成字节码
(byte code),字节码交给虚拟机运行,虚拟机会调用CPU内存等硬件资源,进行计算,最后产生结果。