原理
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` 文件在脚本的生命周期内只执行一次。