为什么不能用Python重新导入?

为什么不能用Python重新导入?,第1张

概述关于SO的重新导入有很多问题和答案,但如果不了解其背后的机制,这一切似乎都非常反直觉. 如果导入模块,更改内容,然后尝试再次导入,您会发现第二次导入无效: >>> import foo # foo.py contains: bar = 'original'>>> print foo.baroriginal>>> # edit foo.py and change to: bar = 'c 关于SO的重新导入有很多问题和答案,但如果不了解其背后的机制,这一切似乎都非常反直觉.

如果导入模块,更改内容,然后尝试再次导入,您会发现第二次导入无效:

>>> import foo    # foo.py contains: bar = 'original'>>> print foo.baroriginal>>> # edit foo.py and change to: bar = 'changed'>>> import foo>>> print foo.baroriginal

当我发现重装时,我是一个非常开心的露营者:

>>> reload(foo)>>> print foo.barchanged

但是,当您从模块导入项目而不导入模块本身时,没有简单的解决方案:

>>> from foo import baz>>> print bazoriginal>>> # change foo.py from baz = 'original' to baz = 'changed'>>> from foo import baz>>> print bazoriginal>>> 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中缓存.任何在同一会话中再次导入同一模块的尝试只会返回其中包含的现有模块.当从多个位置导入模块时,这可以加快整体体验.它还允许模块在所有导入之间共享自己的对象,因为每次都返回相同的模块.

如上所述,您可以使用reload重新导入整个模块.检查文档中的警告,因为即使这不是万无一失的.

从模块导入特定项目时,将按上述方式导入整个模块,然后将请求的对象放在命名空间中.重新加载不起作用,因为这些对象不是模块,并且您从未收到对模块本身的引用.解决方法是获取模块的引用,重新加载它,然后重新导入:

>>> from foo import baz>>> print bazoriginal>>> # change foo.py from baz = 'original' to baz = 'changed'>>> import foo>>> reload(foo)>>> from foo import baz>>> print bazchanged
总结

以上是内存溢出为你收集整理的为什么不能用Python重新导入?全部内容,希望文章能够帮你解决为什么不能用Python重新导入?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1194641.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存