pyhton中__pycache__文件夹的产生与作用详解


Posted in Python onNovember 24, 2019

用python编写了一个工程,但在第一次运行后,发现工程根目录下生成了一个__pycache__文件夹,里面是和py文件同名的各种以.cpython-35.pyc结尾的文件。cpython-35各项意义,cpython代表的是c语言实现的Python解释器,-35代表的是3.5版本。至于pyc,需要先了解一下模块的调用。

模块的调用

Python导入模块时,实际上会把被导入的模块执行一遍。例如调用test.py模块:

def haha():
  print("haha")

haha()

主程序main.py:

import test

print("good")

执行结果:

haha
good

如何才能只是单纯调用而不执行被调用模块的代码呢?要想被调用模块代码不被执行,可以使用__name__。如果不涉及模块导入,__name__的值就是__main__,如果模块被导入引用的话,那么这个模块内的__name__值就是文件的名字(不带.py),例如test.py:

def haha():
  print("haha")

haha()
print(__name__)

执行结果为:

haha
__main__

如果test被导入引用的话,例如test2:

import test

print("good")

运行结果为:

haha
test
good

在被调用的模块中,可执行代码前加上if __name__ == '__main__':这么一句判断,被调用的模块的代码就不会被执行。

由来

Python程序运行时不需要编译成二进制代码,而直接从源码运行程序。简单来说是,Python解释器将源码转换为字节码,然后再由解释器来执行这些字节码。

解释器的具体工作:

1、完成模块的加载和链接;
2、将源代码编译为PyCodeObject对象(即字节码),写入内存中,供CPU读取;
3、从内存中读取并执行,结束后将PyCodeObject写回硬盘当中,也就是复制到.pyc或.pyo文件中,以保存当前目录下所有脚本的字节码文件。

之后若再次执行该脚本,它先检查【本地是否有上述字节码文件】和【该字节码文件的修改时间是否在其源文件之后】,是就直接执行,否则重复上述步骤。

第一次执行代码的时候,Python解释器已经把编译的字节码放在__pycache__文件夹中,这样以后再次运行的话,如果被调用的模块未发生改变,那就直接跳过编译这一步,直接去__pycache__文件夹中去运行相关的*.pyc文件,大大缩短了项目运行前的准备时间。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
Python3计算三角形的面积代码
Dec 18 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
更新修改后的Python模块方法
Mar 03 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 Python
使用Python实现画一个中国地图
Nov 23 #Python
用Python画小女孩放风筝的示例
Nov 23 #Python
python实现对列表中的元素进行倒序打印
Nov 23 #Python
Python实现打印实心和空心菱形
Nov 23 #Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 #Python
python实现画循环圆
Nov 23 #Python
解决python彩色螺旋线绘制引发的问题
Nov 23 #Python
You might like
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
php中session退出登陆问题
2014/02/27 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
原生JS实现留言板
2020/03/26 Javascript
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
设计顾问服务计划书
2014/05/04 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
小学德育工作总结2015
2015/05/12 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
农村老人去世追悼词
2015/06/23 职场文书
保护环境建议书作文400字
2015/09/14 职场文书