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中使用元类的教程
Apr 28 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
查看django版本的方法分享
May 14 Python
Windows下PyCharm安装图文教程
Aug 27 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
Python类装饰器实现方法详解
Dec 21 Python
总结python中pass的作用
Feb 27 Python
PyQt5 多窗口连接实例
Jun 19 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
Python编程super应用场景及示例解析
Oct 05 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
YII框架常用技巧总结
2019/04/27 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
深入研究React中setState源码
2017/11/17 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python写日志封装类实例
2015/06/28 Python
简单的python后台管理程序
2017/04/13 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
python Tkinter版学生管理系统
2019/02/20 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
Python实现简单猜数字游戏
2021/02/03 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
长城英文导游词
2015/01/30 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书