python `__init__.py` 文件在包被导入时只会执行一次,并且在脚本的生命周期内也仅执行一次

发布时间:2025-04-27      访问量:33
是的,在 Python 中,`__init__.py` 文件在包被导入时只会执行一次,并且在脚本的生命周期内也仅执行一次。下面为你详细解释其中的原理和示例验证。

原理
Python 解释器会追踪哪些包已经被导入。当第一次导入某个包时,解释器会执行该包下 `__init__.py` 文件中的代码,以此来初始化包的命名空间。在后续再次导入同一个包时,Python 解释器会直接使用之前已经导入的包,而不会再次执行 `__init__.py` 文件中的代码,这是为了避免重复执行初始化代码而带来的不必要开销。

示例验证
以下代码展示了 `__init__.py` 文件只执行一次的特性:
my_package/__init__.py
print("__init__.py 文件正在执行")
main.py
import my_package print("第一次导入完成") import my_package print("第二次导入完成")

代码解释
- **`__init__.py`**:在这个文件里添加了一条打印语句 `print("__init__.py 文件正在执行")`,当包被导入时,此语句会执行。
- **`main.py`**:在该脚本中两次导入 `my_package` 包。

运行结果
运行 `main.py` 脚本,输出结果如下:
__init__.py 文件正在执行 第一次导入完成 第二次导入完成
从输出结果能够看出,`__init__.py` 文件中的打印语句仅在第一次导入包时执行,第二次导入时并未再次执行,这就验证了 `__init__.py` 文件在脚本的生命周期内只执行一次。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念