我可以在正常导入时简单地重新加载模块(imp.reload(模块或别名))。但是是否有可能在导入到当前名称空间后(从模块import *)重新加载所有内容?
imp.reload(module)无法正常工作,提示“名称:未定义模块”
当您执行此操作时from module import *
,该模块中的所有内容都将提取到当前名称空间中,最后,对它的引用将module
被删除。但是,由于模块缓存,仍然可以从访问模块对象sys.modules
,因此,如果您稍后再进行一些导入,则不必再次获取模块。
也就是说,一种实现您期望的方式是:
import sys
from foo import *
print A, B #prints 1, 2
A, B = 100, 200
mod = reload(sys.modules['foo'])#use imp.reload for Python 3
vars().update(mod.__dict__) #update the global namespace
print A, B #prints 1, 2
作为一个侧面说明,使用import *
时通常是令人难以接受的:
请注意,通常不赞成从模块或包中导入*的做法,因为这通常会导致可读性差的代码。但是,可以使用它来保存交互式会话中的键入内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句