python学习笔记04:了解.pyc:了解python执行程序的过程
例:自写一个可执行的.py文件,作为一个被调用的模块,放到python存放第三方库资源的site-packages下,在程序导入该模块后,运行时按照先在本文件所在目录下找该模块,找不到,就到全局变量中找,直至在site-packages中找到并调用。
- 编译型语言:在程序执行之前,通过编译器,对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,直接执行。速度快,如C语言。
- 解释型语言:没有这个编译过程,是程序执行时,通过解释器,对程序进行逐行解释,即边执行边编译。如Ruby。
java的划分不纯粹,首先是通过编译器编译成字节码文件,然后运行时通过解释器解释成机器文件。所以,java是一种先编译后解释的语言。即在程序真正执行之前,先会进行一次预编译。预编译指的是把能编译的部分先编译了一遍。
python在执行python hello.py时,其实是激活了python的“解释器”,告诉解释器,你要开始工作了。可是在“解释”之前,其实执行的第一项工作和java一样,是编译。所以严格意义上来说,python也是一种先编译后解释的语言。
python的运行过程:
先了解PyCodeObject和pyc文件。
PyCodeObject是python编译器真正编译成的结果。
pyc文件是以文件形式存下来的编译的结果。存在于硬盘里,python资源路径下的__pycache__文件中。
python开始运行程序----[生成编译结果—位于内存中的PyCodeObject]-----python运行结束(python解释器将PyCodeObject写回到.pyc文件)
python第二次运行----硬盘中找.pyc文件—找到:直接载入;没找到:重复上一过程,在程序中编译
所以可以说,pyc文件其实是PyCodeObject的一种持久化保存方式。
修改执行文件 —原同名的.pyc文件与新的不同:
python执行前检测一次.pyc文件 ---- 判断同名的.pyc文件的更新时间 ---- 执行最新的.pyc文件。