虚拟机工作前:
python 在运行.py 文件的时候,先进行编译字节码的形式来进行存在,字节码的存在是为了优化速度。
字节码的更改是通过时间戳来进行。字节码发送的python 虚拟机之中,虚拟机是python解释器的最后一部分
什么是字节码?
字节码就是为了提高速度,比如减少模块加载的时间。
虚拟机的具体工作:
虚拟机的工作就是翻译的工作,字节码就是为了优化速度!那字节码是不是就是机能识别的代码?答案是不是的,解释器还是需要再次经过程序来翻译的,这也是解释语言的性能差的原因之一。
那我们学python有什么用?
python解释器起到了中间"翻译官"的功能,我们不需要了解机器底层是如何识别的,只需要关心如何让解释器来识别?是不是有点绕?简而言之,我们可以随意去写我们的代码,不需要关心底层就可以了。
那么解释器如何理解我们的代码呢?也就是类与对象呢?
实际上在python 之中类也是对象,甚至连函数都是对象!都是演绎好的,都他妈的是假的!!!!什么静态方法,什么动态方法,都是python的语法糖,都是解释器提前搭好的“台子”。一种模拟面向对象(不过这点你不用担心,我们还是可以使用,毕竟封装多态继承还是有的!!)
实际上在python好了现在总结一下吧!!首先我们创建一个类,解释器也就会创建一个对象(类对象)。按照类对象的功能取划分命名空间!然后我们创建实例对象(实际上是类创建的)。最后运行我们的程序,编译成字节码,最后按照行来执行。
python 编译过程!
1,python 在初始化环境的时候会预先加载一批内建模块到内存,当我们导入模块的时候解释器会在其中搜索是否有模块,如果存在就会导入到当前的命名空间,并且加载。
2,如果找不到就会为模块创建一个字典对对象,将信息放置内存之中,加载前确认是否对文件编译,如果需要那么就会先编译。
3,执行动态加载,加载的是编译后的字节码。将所有的对象模块放置相应的字典之中。
4,导入模块时候放置命名空间的冲突。先编译,会将自己文件的函数,或者变量覆盖掉