当模块多次导入时,python是否会优化模块?
问题内容:
如果代码的某些子模块加载了大模块,那么从该名称空间引用该模块而不是再次导入该模块有什么好处?
例如:我有一个模块MyLib,该模块大量使用了ReallyBigLib。如果我有导入MyLib的代码,我应该像这样将模块挖出来
import MyLib
ReallyBigLib = MyLib.SomeModule.ReallyBigLib
要不就
import MyLib
import ReallyBigLib
问题答案:
可以将Python模块视为单例……无论您导入它们多少次,它们都只会初始化一次,因此最好这样做:
import MyLib
import ReallyBigLib
导入声明中的相关文档:
https://docs.python.org/2/reference/simple_stmts.html#the-import-
statement
一旦知道模块的名称(除非另有说明,否则术语“模块”将同时指代软件包和模块),就可以开始搜索模块或软件包。首先检查的是sys.modules,这是先前已导入的所有模块的缓存。如果在那里找到模块,则将其用于导入步骤(2)。
导入的模块缓存在sys.modules中:
这是将模块名称映射到已经加载的模块的字典。可以对其进行操作以强制重新加载模块和其他技巧。请注意,从该词典中删除模块与在相应模块对象上调用reload()并不相同。