成为Python砖家(3): 何时产生字节码 .pyc 文件

好奇:.pyc和 __pycache__是啥?

你是否好奇,在某些 Python 工程中,当执行了 xxx.py脚本后,多出了 __pycache__目录?这个目录下存放的是一些 .pyc结尾的文件。
这些文件,叫做 python bytecode。 官方文档中是这样描述的:

在这里插入图片描述

在这里插入图片描述

继续好奇:何时产生 .pyc 文件?

当导入模块的时候,如果被导入的模块,未曾产生过 .pyc文件, 就会生成 .pyc文件。我们尝试写一个最简单的模块 hello, 它只提供 greet()函数,具体实现为:

hello/init.py: 内容为空

hello/hello.py:
def greet():print("hello world")

调用这个模块:main.py:

from hello import helloif __name__ == '__main__':hello.greet()

好,我们观察在第一次引入模块前、引入后,整个目录的变化:

在这里插入图片描述

可以看到, 在第一次导入了 hello模块(from hello import hello)后,hello模块的目录下生成了子目录 pycache, 里面包含两个 .pyc文件:
__init__.cpython-311.pyc
hello.cpython-311.pyc
再次好奇: Python 标准库的 .pyc 文件在哪里?
上一步我们看到,第一次导入 hello 模块后生成了 hello.cpython-311.pyc文件,其中 hello是模块名字。 那么显然, Python 标准库,比如 os, 应该有一个对应的 os.cpython-311.pyc文件。找找看?

cd /Users/zz/soft/miniconda3
find . -name "os.cpython-311.pyc"

进一步好奇:为什么 numpy 的 .pyc 出现了多次?

大概是为了缓存优化:

在这里插入图片描述

结论

对于自己写的 Python 模块,当它第一次被导入,就会在模块目录下生成 __pycache__目录,存放各个文件的 .pyc字节缓存文件。
而 Python 标准库、numpy等常见库,在安装的时候, 会顺带提供 .pyc文件,并且可能有多份。

Reference

file:///Users/zz/Documents/pydoc-zh-cn/python-3.12.5-docs-html/glossary.html#glossary

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405587.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度剖析数字媒体产业链的无限潜力与创新生态

在当今信息爆炸的时代,数字媒体产业链正以势不可挡的姿态展现出其令人瞩目的无限潜力与创新生态。 数字媒体的发展潜力简直无可限量。从在线视频的爆发式增长,到虚拟现实和增强现实技术带来的沉浸式体验,再到社交媒体平台上丰富多彩的内容创…

Windows 应用程序加密 - 功能强大、可定制、开源且完全免费

先进而优雅的 Windows 应用程序加密 - 功能强大、可定制、开源且完全免费! 项目地址:FadCrypt GitHub 工作原理: 1. 密码创建:设置密码后,密码会与锁定应用程序的配置文件一起加密保存。监控期间,这些文…

望繁信科技入选2024年第3批上海市高新技术成果转化项目名单

近日,上海望繁信科技有限公司(以下简称“望繁信科技”)凭借其自主研发的“数字北极星流程挖掘分析软件”项目,成功入选2024年第3批上海市高新技术成果转化项目名单。这一殊荣根据《上海市高新技术成果转化项目认定办法》&#xff…

linux 中docker git 容器磁盘占满如何解决

1.问题描述 git之前还使用ok,突然出现访问500 错误,懵圈了 2.问题排查 1. 服务器查看,服务正常,没有异常出现。 2. 查找资料,需要查看是否磁盘已经满了果然使用df-h 后显示磁盘已经满了,且容器和本地都…

WPF篇(20)- Menu菜单+ContextMenu上下文菜单+StatusBar状态栏

Menu菜单 Menu控件继承于MenuBase,而MenuBase继承于ItemsControl。所以学习Menu之前,要先了解一下MenuBase基类。它是一个抽象类,拥有一个ItemContainerTemplateSelector模板选择器,并重写了一些关于键盘和鼠标的方法。 Menu的子…

电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!

你是否曾好奇那些键盘敲击背后的秘密?电脑监控不仅是守护企业安全的隐形盾牌,更是揭秘高效与合规的魔法镜!一键解锁安企神监控回放,就像打开时间宝盒,让过去的工作瞬间跃然眼前。无论是精彩瞬间还是潜在风险&#xff0…

【Android】adb devices 出现devices offline的问题

1 问题 adb devices 出现devices offline 2 解决方法 adb kill-serveradb start-server 然后,adb devices查看。 adb devices 问题解决啦。。。💛 💙 💜 ❤️ 💚 💛 💙 💜 ❤️…

12/24/30v/36转固定5v输出芯片

设计电源芯片的应用方案时,必须保证输入电压在DC6V至30V范围内,输出电压为固定的5V,同时电流需在200至300mA之间。在这种需求下,推荐使用AH1405芯片,因其输入电压范围宽(6-40V),内置…

自闭症寄宿语言开发全托学校

在自闭症儿童的世界里,语言往往是一座难以跨越的高山。语言问题作为自闭症儿童的核心障碍之一,给他们的生活、学习和社交带来了极大的困扰。因此,语言开发对于自闭症儿童来说至关重要。那么,怎样才能更好地对自闭症儿童进行语言开…

arthas源码刨析:启动 (1)

文章目录 arthas-bootBootstrap Created with Raphal 2.3.0 开始 检查监听端口 jps 列表java应用 下载 lib 依赖 功能移交给 arthas-core 结束 arthas-boot 该module 的代码只有3个类: Bootstrap 启动类 Bootstrap ,开头的注解就是 alibaba 的 cli 中…

Qt 0820作业

一、思维导图 二、闹钟 头文件代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> //时间类 #include <QTimer> //时间事件类 #include <QTimerEvent> //定时器事件类 #include <QMouseEvent> //鼠标…

CSS 元素的尺寸

const dom document.querySelector(‘.size’) 以下方法只是拿的width举例 浏览器渲染管线 dom.style.width: 它读取/设置的是浏览器渲染管线的第一个步骤dom解析,也就是DOM树 比如: <a style"width:100px"></a><a style"width: auto"&…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(三)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

Android常见界面控件(二)

目录 ​前言 一、 RadioButton控件 设置RadioGroup的监听事件 二、CheckBox控件 三、Toast类 改变Toast窗口的提示位置 四、EditText控件 常用属性 前言 在上一篇中&#xff0c;我们讲解了三个常见的控件&#xff1a;TextView控件、Button控件、ImageView控件&#xf…

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机

现代化生产中&#xff0c;电子元件通常会使用自动化设备来进行生产&#xff0c;例如像PCB&#xff08;印刷电路板&#xff09;的组装。但是生产过程中也会面临一些问题&#xff0c;类似于如何解决在PCB板上牢固、精准地安装各种组件呢&#xff1f;IBL Lttechnik GmbH公司的CM80…

5.Linux_Shell编程

概述 什么是shell脚本&#xff1a; Shell脚本是利用shell的功能所写的一个程序。这个程序是使用纯文本文件&#xff08;后缀为.sh&#xff09;&#xff0c;将一些shell的语法与命令&#xff08;含外部命令&#xff09;写在里面&#xff0c;搭配正则表达式、管道命令与数据流重…

公认最强充电宝有哪些?盘点四款公认强悍级别充电宝推荐

随着智能手机和其他移动设备的广泛应用&#xff0c;充电宝已经成为我们生活中不可或缺的一部分。然而&#xff0c;市场上众多品牌和型号的充电宝也让消费者面临选择难题&#xff0c;安全隐患也随之浮现。因此&#xff0c;选择一款安全可靠、性能卓越的充电宝显得尤为重要。本文…

“跨越国界,共赢未来:跨境联盟营销的策略与实践

全球化背景下跨境联盟营销的市场有很多机遇&#xff0c;随着全球化的深入发展&#xff0c;跨境电商市场不断扩大&#xff0c;为企业提供了广阔的市场空间。跨境联盟营销可以借助全球化的趋势&#xff0c;实现品牌国际化和市场拓展。随着大数据、人工智能、区块链等技术的不断发…

【数据结构】PTA 求链表的倒数第m个元素 C语言

请设计时间和空间上都尽可能高效的算法&#xff0c;在不改变链表的前提下&#xff0c;求链式存储的线性表的倒数第m&#xff08;>0&#xff09;个元素。 函数接口定义&#xff1a; ElementType Find( List L, int m ); 其中List结构定义如下&#xff1a; typedef struct…

5个自动化面试题,助你过关斩将!

一、python深拷贝与浅拷贝的区别 Python中的深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是两种不同的对象复制方式&#xff0c;它们之间的主要区别在于复制的内容和范围。 浅拷贝&#xff08;Shallow Copy&#xff09; 浅拷贝会创…