我用python写了一个项目,第一次运行后发现在项目根目录下生成了一个__pycache__文件夹,和py的同名file各种以.cpython-35.pyc结尾的文件。cpython-35的含义,cpython代表用c语言实现的Python解释器,-35代表3.5版本。至于pyc,需要先了解模块的调用。模块调用当Python导入一个模块时,它实际上执行一次导入的模块。例如调用test.py模块:defhaha??():print("haha")haha??()主程序main.py:importtestprint("good")执行结果:haha??good怎么可能只是简单的调用而不执行被调用的模块代码呢?如果不想执行被调用的模块代码,可以使用__name__。如果不涉及模块导入,则__name__的值为__main__。如果模块被导入引用,那么这个模块中的__name__值就是文件名(不带.py),比如test.py:defhaha??():print("haha")haha??()print(__name__)执行结果为:haha__main__如果test被导入引用,例如test2:importtestprint("good")执行结果为:hahatestgood在被调用的模块中,可以在执行之前加上if__name__=='__main__'code:有了这样的判断,被调用模块的代码就不会执行了。原因是Python程序在运行时不需要编译成二进制代码,而是直接从源代码运行程序。简单的说,Python解释器将源代码转换成字节码,然后解释器执行这些字节码。解释器的具体工作:1.完成模块的加载和链接;2.将源代码编译成PyCodeObject对象(即字节码),写入内存供CPU读取;3、从内存中读取并执行,结束后将PyCodeObject写回硬盘,即复制到.pyc或.pyo文件中,保存当前目录下所有脚本的字节码文件。如果稍后再次执行该脚本,则首先检查【本地是否有上述字节码文件】和【该字节码文件的修改时间是否在其源文件之后】,如果是则直接执行,否则重复以上步骤。代码第一次执行时,Python解释器已经将编译好的字节码放在了__pycache__文件夹中,所以如果后面再次运行,如果调用的模块没有变化,那么就直接跳过编译这一步。直接进入__pycache__文件夹运行相关的*.pyc文件,大大缩短了项目运行前的准备时间。
