python代码文件中,经常会出现一个__init__.py文件。顾名思义,这个文件就是用来初始化python结构的,可以自动执行一些代码。

苏南大叔:python代码中的__init__.py文件有什么用? - python__init__py
python代码中的__init__.py文件有什么用?(图6-1)

大家好,这里是苏南大叔的博客“程序如此灵动”。本文讲述python代码中的__init__.py文件。测试环境:win10python3.6.8

import时,自动执行代码

在执行import代码的时候,会自动执行__init__.py里面的相关代码,路径上涉及的多个__init__.py文件都会被自动执行。测试文件目录结构如下:

苏南大叔:python代码中的__init__.py文件有什么用? - 目录结构
python代码中的__init__.py文件有什么用?(图6-2)

主程序代码是:

from root.sub1 import s11
import root.sub1.s12

其余文件的代码,都是:

print(__file__)

可以看到主程序import的路径上,涉及了2个__init__.py文件,都被自动执行了。而且在同一个py文件中,这些自动执行的__init__.py文件,每个只执行一次,这些表现上来看,有点像phprequire_once函数。

苏南大叔:python代码中的__init__.py文件有什么用? - 生命周期内仅执行一次
python代码中的__init__.py文件有什么用?(图6-3)

特殊变量__all__

__init__.py定义变量__all__,可以控制import *的具体条目。想让谁代表大家就加载谁,定义一个数组就行了。

苏南大叔:python代码中的__init__.py文件有什么用? - 测试代码结构2
python代码中的__init__.py文件有什么用?(图6-4)

不定义__all__的话,目前的测试结果是不引入任何文件,似乎有些不够智能。

苏南大叔:python代码中的__init__.py文件有什么用? - init_all
python代码中的__init__.py文件有什么用?(图6-5)

主程序代码如下:

from root.sub3 import *

不能写成

import root.sub3.*

直接报错。

苏南大叔:python代码中的__init__.py文件有什么用? - 写法报错
python代码中的__init__.py文件有什么用?(图6-6)

相关链接

总结

未知的东西太多,学不过来。承认自己的平凡,挺好的。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。