有人能帮忙澄清一下吗?在使用import
命令时,各个包目录中的__init__.py文件是在哪个时刻执行的?
- 每个被包含的模块执行时?
- 只在第一次
import
命令时执行一次? - 每次
import
命令都执行?
有人能帮忙澄清一下吗?在使用import
命令时,各个包目录中的__init__.py文件是在哪个时刻执行的?
import
命令时执行一次?import
命令都执行?它在第一次模块导入时进行评估。在下一次导入时,解释器检测到模块已经被加载,并简单地返回对其的引用。没有必要重新执行代码。
引用导入系统:
关于缓存模块:
在导入搜索期间首先检查的位置是sys.modules。此映射作为所有先前导入的模块(包括中间路径)的缓存。因此,如果先前导入了foo.bar.baz,则sys.modules将包含foo、foo.bar和foo.bar.baz的条目。每个键将其值作为相应的模块对象。
在导入期间,模块名称在sys.modules中查找,如果存在,则相关联的值是满足导入的模块,进程完成。但是,如果该值为None,则会引发ImportError。如果模块名称丢失,则Python将继续搜索该模块。
在导入时执行__init__
:
__init__.py
文件的目录。当导入常规包时,将隐式执行此__init__.py
文件,并将其定义的对象绑定到包名称空间中的名称。 __init__.py
文件可以包含与任何其他模块相同的Python代码,当它被导入时,Python会向模块添加一些附加属性。__init__.py
会被执行吗? - Henry
print
语句,然后试试看。 - DaveBensonPhillips