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 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
简单介绍Python中的decode()方法的使用
May 18 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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显示MySQL数据的三种方法
2008/06/05 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
php生成shtml类用法实例
2014/12/09 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
js实现在字符串中提取数字
2013/11/05 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python执行时间的计算方法小结
2017/03/17 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
python顺序执行多个py文件的方法
2019/06/29 Python
python socket 聊天室实例代码详解
2019/11/14 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python判断元素是否存在的实例方法
2020/09/24 Python
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
股权收购意向书
2014/04/01 职场文书
中职生自荐信范文
2014/06/15 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
美丽心灵观后感
2015/06/01 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技