如何在“from <module> import *”之后重新加载?</module>

时间:2014-03-16 20:30:06

标签: python module python-import

我可以在正常导入时重新加载模块(imp.reload( module或alias ))。 但是可以在导入到当前命名空间后重新加载所有内容(来自 module import *)吗?

imp.reload( module )没有说明&#34;名称:模块未定义&#34;

1 个答案:

答案 0 :(得分:6)

执行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 *usually frowned upon

  

请注意,一般来说,从模块或导入*的做法   包裹是不受欢迎的,因为它经常会导致代码难以理解。   但是,可以使用它来保存交互式会话中的输入。