当你导入一个模块,然后再次重新导入它,会被重新导入/覆盖,还是跳过?
当你导入模块"a"和"b",但同时在模块"a"中也导入了模块"b",会发生什么?这样做安全吗?例如,如果模块"b"中实例化了一个类,你会不会最终实例化两次?
import
命令会载入匹配的.py
、.pyc
或.pyo
文件,并创建一个模块对象,将其以完全限定(“点”)名称存储在sys.modules
字典中。如果第二个import
在该字典中找到要导入的模块,则它将返回该模块而无需再次加载文件。reload()
。import a
将从a.py[c]
载入a
,“import b”将返回已经由a
载入的模块sys.modules['b']
。import sys
print sys.modules
sys.modules
是一个字典,它将模块名称映射到模块对象。import语句的第一件事就是查找sys.modules
,如果找不到该模块,它将被实例化并添加到sys.modules
以供未来导入使用。
请参阅此页面了解更多详细信息:http://effbot.org/zone/import-confusion.htm(请查看“Python导入模块时做了什么?”)
types.ModuleType
类型的对象,当第二次导入时,只会创建对该对象的引用。 - Ski__name__ == "__main__"
),并且从另一个模块中导入了这个模块,那么这个模块会被执行两次!(第二次执行时,__name__
等于模块名)
例如:
main.py: import xxx
xxx.py: import main
运行:python main.py
- gecco