Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究相关的知识,希望对你有一定的参考价值。

为了研究__pycache__的作用,特做实验如下:

大致思路是先“使用版本控制工具git监控文件变动”,再“查阅官方文档进行深入了解”

新建空白测试用文件夹TestForPyCache并进入

初始化Git仓库

新建空白Py文件

fsutil file createnew main.py 0

意思为创建大小为0的main.py文件

创建一个最简单的模块

新建MyModel文件夹


并在新建的文件夹中新建两个空白文件__init__.pyGetSum.py

fsutil file createnew .\\MyModel\\__init__.py 0
fsutil file createnew .\\MyModel\\GetSum.py 0

编辑新建的Py文件

MyModel/GetSum.py:


这里使用一段非常简单的代码进行测试

# 求1 + 2 + 3 + ... + n
def getSumN(n: int) -> int:
    s = 0
    for i in range(n + 1):
        s += i
    return s

main.py:

from MyModel import GetSum

n = int(input("Input the n: "))
result = GetSum.getSumN(n)
print(result)

记得保存文件

提交到版本库

可以看到有一次提交记录

并且当前工作区无改动

运行一次main.py

这次输入100000000

可以看到工作区有文件变动,新增了MyModel/__pycache__/文件夹


同样添加到版本库

可以看到一共有两条提交记录,且工作区无改动

那么,运行其他输入,PyCache会随之改变吗?

再次运行main.py

这次输入值50000000

查看工作区文件状态


发现工作区无改动

这就说明每次运行不同输入可能不会导致__pycache__随之进行多次改变

我电脑上Python的版本为3.9.4


查看官方文档:https://docs.python.org/zh-cn/3.9/tutorial/modules.html?highlight=pycache


点击蓝色链接PEP 3147https://peps.python.org/pep-3147/

即可看到pycache创建流程图


(图源:https://peps.python.org/_images/pep-3147-1.png

只有当“pycache/xx.pyc与源文件不符”时,才会重新编译生成pycache

pycache并不是为了存储“历史某次的执行结果”,而只是“为了快速加载模块的速度,把模块的编译版缓存在 pycache 目录”

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127724471

以上是关于Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.8 新特性全面解读

编译Python文件

44.编译Python文件

为啥 Git 忽略不适用于 __pycache__ 文件夹? [复制]

《Python开发 - Python杂记》Python项目删除__pycache__文件夹

《Python开发 - Python杂记》Python项目删除__pycache__文件夹