为什么不能用Python重新导入?
发布时间:2020-12-20 12:20:34 所属栏目:Python 来源:网络整理
导读:关于SO的重新导入有很多问题和答案,但如果不了解其背后的机制,这一切似乎都非常反直觉. 如果导入模块,更改内容,然后尝试再次导入,您会发现第二次导入无效: import foo # foo.py contains: bar = 'original' print foo.baroriginal # edit foo.py and change
关于SO的重新导入有很多问题和答案,但如果不了解其背后的机制,这一切似乎都非常反直觉.
如果导入模块,更改内容,然后尝试再次导入,您会发现第二次导入无效: >>> import foo # foo.py contains: bar = 'original' >>> print foo.bar original >>> # edit foo.py and change to: bar = 'changed' >>> import foo >>> print foo.bar original 当我发现重装时,我是一个非常开心的露营者: >>> reload(foo) >>> print foo.bar changed 但是,当您从模块导入项目而不导入模块本身时,没有简单的解决方案: >>> from foo import baz >>> print baz original >>> # change foo.py from baz = 'original' to baz = 'changed' >>> from foo import baz >>> print baz original >>> reload(foo) Traceback (most recent call last): File "<pyshell#10>",line 1,in <module> reload(foo) NameError: name 'foo' is not defined 为什么Python不会在为其提供新的import语句时更新导入的项目? 解决方法
导入模块时,它将在
sys.modules 中缓存.任何在同一会话中再次导入同一模块的尝试只会返回其中包含的现有模块.当从多个位置导入模块时,这可以加快整体体验.它还允许模块在所有导入之间共享自己的对象,因为每次都返回相同的模块.
如上所述,您可以使用 从模块导入特定项目时,将按上述方式导入整个模块,然后将请求的对象放在命名空间中.重新加载不起作用,因为这些对象不是模块,并且您从未收到对模块本身的引用.解决方法是获取模块的引用,重新加载它,然后重新导入: >>> from foo import baz >>> print baz original >>> # change foo.py from baz = 'original' to baz = 'changed' >>> import foo >>> reload(foo) >>> from foo import baz >>> print baz changed (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |