python通过解释器来编译_python 解释器与编译过程,代码的搬运工

虚拟机工作前:

python 在运行.py 文件的时候,先进行编译字节码的形式来进行存在,字节码的存在是为了优化速度。

字节码的更改是通过时间戳来进行。字节码发送的python 虚拟机之中,虚拟机是python解释器的最后一部分

什么是字节码?

字节码就是为了提高速度,比如减少模块加载的时间。

虚拟机的具体工作:

虚拟机的工作就是翻译的工作,字节码就是为了优化速度!那字节码是不是就是机能识别的代码?答案是不是的,解释器还是需要再次经过程序来翻译的,这也是解释语言的性能差的原因之一。

那我们学python有什么用?

python解释器起到了中间"翻译官"的功能,我们不需要了解机器底层是如何识别的,只需要关心如何让解释器来识别?是不是有点绕?简而言之,我们可以随意去写我们的代码,不需要关心底层就可以了。

那么解释器如何理解我们的代码呢?也就是类与对象呢?

实际上在python 之中类也是对象,甚至连函数都是对象!都是演绎好的,都他妈的是假的!!!!什么静态方法,什么动态方法,都是python的语法糖,都是解释器提前搭好的“台子”。一种模拟面向对象(不过这点你不用担心,我们还是可以使用,毕竟封装多态继承还是有的!!)

实际上在python好了现在总结一下吧!!首先我们创建一个类,解释器也就会创建一个对象(类对象)。按照类对象的功能取划分命名空间!然后我们创建实例对象(实际上是类创建的)。最后运行我们的程序,编译成字节码,最后按照行来执行。

python 编译过程!

1,python 在初始化环境的时候会预先加载一批内建模块到内存,当我们导入模块的时候解释器会在其中搜索是否有模块,如果存在就会导入到当前的命名空间,并且加载。

2,如果找不到就会为模块创建一个字典对对象,将信息放置内存之中,加载前确认是否对文件编译,如果需要那么就会先编译。

3,执行动态加载,加载的是编译后的字节码。将所有的对象模块放置相应的字典之中。

4,导入模块时候放置命名空间的冲突。先编译,会将自己文件的函数,或者变量覆盖掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值