码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究


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

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

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

    新建文件夹TestForPyCache进入测试用文件夹

    初始化Git仓库
    初始化Git仓库
    新建空白Py文件
    新建空白Py文件

    fsutil file createnew main.py 0
    
    • 1

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

    创建一个最简单的模块

    新建MyModel文件夹

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

    新建类中文件

    fsutil file createnew .\MyModel\__init__.py 0
    fsutil file createnew .\MyModel\GetSum.py 0
    
    • 1
    • 2

    编辑新建的Py文件

    MyModel/GetSum.py:

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

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

    main.py:
    main.py

    from MyModel import GetSum
    
    n = int(input("Input the n: "))
    result = GetSum.getSumN(n)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    记得保存文件

    提交到版本库

    提交到版本库

    可以看到有一次提交记录

    并且当前工作区无改动
    当前工作区无改动

    运行一次main.py

    运行一次

    这次输入100000000

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

    文件变动,MyModel/__pycache__/
    同样添加到版本库

    将Cache添加到版本库

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

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

    再次运行main.py
    再次运行main.py
    这次输入值50000000

    查看工作区文件状态

    发现工作区无改动
    发现工作区无改动

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

    我电脑上Python的版本为3.9.4

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

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

    即可看到pycache创建流程图

    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

  • 相关阅读:
    创建并启动华为HarmonyOS本地与远程模拟器及远程真机
    Web会话跟踪:Cookie与Session
    提桶跑路前一天——整理组件
    Spring中的循环依赖的解决办法
    浅谈架构.补缺.V2
    vue双向数据绑定原理
    Linux 设备驱动模型platform==Linux驱动开发5
    航空摄影与正射摄影的区别
    万事通,专精部分领域的多功能 Transformer 智能体
    对abstract关键字的误解
  • 原文地址:https://blog.csdn.net/Tisfy/article/details/127724471
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号