在哪个时刻以及python执行__init__.py文件的频率

Sha*_*awk 14 python python-import

当有人使用import命令时,有人可以提供帮助和澄清,此时各个包目录中的__init__.py文件是否被执行?

  1. 对于每个包含的模块?
  2. 只有一次在第一个import命令?
  3. 对于每个import命令?

Łuk*_*ski 15

它是在第一个模块导入时评估的.在下一次导入时,解释器检测到该模块已经加载,并简单地返回对它的引用.无需重新执行代码.

引用导入系统:

在缓存模块上:

导入搜索期间检查的第一个位置是sys.modules.此映射用作先前已导入的所有模块的缓存,包括中间路径.因此,如果先前导入了foo.bar.baz,则sys.modules将包含foo,foo.bar和foo.bar.baz的条目.每个键的值都是相应的模块对象.

在导入期间,将在sys.modules中查找模块名称,如果存在,则关联的值是满足导入的模块,并且该过程完成.但是,如果值为None,则引发ImportError.如果缺少模块名称,Python将继续搜索模块.

__init__导入时执行:

Python定义了两种类型的包,常规包和命名空间包.常规包是Python 3.2及更早版本中存在的传统包.常规包通常实现为包含init .py文件的目录.导入常规包时,将隐式执行此__init__.py文件,并且它定义的对象将绑定到包命名空间中的名称.__init__.py文件可以包含与任何其他模块可以包含的相同的Python代码,并且Python将在导入模块时向模块添加一些其他属性.

  • 如果我只导入该包中的一个模块(而不是整个包),“__init__.py”是否会被执行? (3认同)