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

问题描述 投票:13回答:1

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

  1. 对于每个包含的模块?
  2. 只有一次在import指挥?
  3. 对于每个import命令?
python python-import
1个回答
15
投票

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

引用The import system

在缓存模块上:

导入搜索期间检查的第一个位置是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将在导入模块时向模块添加一些其他属性。

© www.soinside.com 2019 - 2024. All rights reserved.