从“ <模块>导入*”后如何重新加载?

阿达布罗

我可以在正常导入时简单地重新加载模块(imp.reload(模块或别名))。但是是否有可能在导入到当前名称空间后(从模块import *)重新加载所有内容

imp.reload(module)无法正常工作,提示“名称:未定义模块

阿什维尼乔杜里(Ashwini Chaudhary)

当您执行此操作时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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章