在使用import
命令时,有人可以提供帮助和澄清,此时各个包目录中的__init__.py文件是否被执行?
import
指挥?import
命令?它是在第一个模块导入时评估的。在下一次导入时,解释器检测到该模块已经加载,并简单地返回对它的引用。无需重新执行代码。
在缓存模块上:
导入搜索期间检查的第一个位置是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将在导入模块时向模块添加一些其他属性。