python源程序执行_Python程序执行机制

对于Pyhton语言的执行过程,笔者整理了以下流程图:

关于以上流程图的说明:

1.执行a.py文件时,首先会检查a.py文件内是否导入了其他文件(如import b)

2.若没有导入其他文件,则会将源码a.py编译成中间结果的字节码(即PyCodeObject,它是放在内存中的,并没有做持久化操作),然后再根据中间结果字节码去解释执行(先编译再解释执行)

3.若a.py中导入了其他文件,则会判断是否存在编译好的其他文件的中间结果字节码(如b.pyc)

注:很多同学在这里会疑问,同样是中间结果的字节码,那PyCodeObject和b.pyc有什么区别。这里解释下,PyCodeObject是放在内存中的中间结果,其没有被持久化;而b.pyc是被持久化后的中间结果,是存在硬盘上的

4.若b.pyc文件存在,则接下来会校验b.pyc文件存储的源文件修改时间是否等于源文件b.py真实修改时间

5.若源文件修改时间一致,则将b.pyc加载至内存,根据b的中间结果解释执行,之后再根据a的中间结果解释执行

6.若b.pyc文件不存在,则会编译b.py文件生成中间结果PycodeObject,然后持久化编译结果,生成b.pyc文件,之后根据b的中间结果解释执行

同时重点想说明以下几点:

(1)严格来说,Python是先编译成字节码,然后再解释执行的一门语言

(2).pyc文件的主要作用是持久化编译结果,提升下次的执行效率。至于会不会被持久化,一般是根据import机制(如a.py中导入了b.py文件,那么一般都是b.py被持久化。有些同学会有疑问,为什么a.py为什么不被持久化,那是因为a.py文件是当前反复被编辑的文件,它的持久化没有意义)

(3)也可以通过命令手动编译&持久化:python -m py_compile test.py

(4).py和.pyc文件都是可以直接交给解释器直接处理,只不过处理的步骤不太一样

(5).pyc文件一定程序上还可起到保护源码的作用(但是也有反编译的过程)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值