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

时间:2016-09-12 14:08:20

标签: python python-import

在使用import命令时,有人可以提供帮助并澄清,此时各个软件包目录中的 __ init __。py 文件是否已执行?

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

1 个答案:

答案 0 :(得分: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将在导入模块时向模块添加一些其他属性。