在这种情况下,“重新加载”会做啥? [复制]

Posted

技术标签:

【中文标题】在这种情况下,“重新加载”会做啥? [复制]【英文标题】:What does 'reload' do in this case? [duplicate]在这种情况下,“重新加载”会做什么? [复制] 【发布时间】:2017-05-14 02:04:45 【问题描述】:
import utils; reload(utils)

from utils import *

为什么需要加载两次? 'reload' 不是内置函数。对吧?

【问题讨论】:

reload是python 2中的内置函数docs.python.org/2/library/functions.html#reload 【参考方案1】:

最好的方法是查看reload document,上面写着:

    重新编译 Python 模块的代码并重新执行模块级代码,定义一组新的对象,这些对象绑定到模块字典中的名称。扩展模块的init函数不会被第二次调用。

    与 Python 中的所有其他对象一样,旧对象仅在其引用计数降至零后才会被回收

    模块命名空间中的名称已更新以指向任何新的或更改的对象。

    其他对旧对象的引用(例如模块外部的名称)不会重新绑定以引用新对象,并且必须在它们出现的每个命名空间中更新,如果这是想要的

【讨论】:

【参考方案2】:

在这种情况下“重新加载”有什么作用?

这取决于utils 的作用...例如,如果导入utils 有副作用,那么该效果将再次发生。


另请注意,在任何生产代码中使用reload 绝对是您要避免的事情。 reload 存在的主要原因是为了交互使用...

加载模块 测试它并查看错误 编辑模块 重新加载模块 测试一下 ...

【讨论】:

为什么“副作用”需要再次发生? @user697911 -- 我不知道为什么副作用需要再次发生:-)。我什至不知道utils 副作用。 “编辑”一个模块后,您必须再次运行该模块,并且当您运行该模块时,会再次执行第一个“import utils”。为什么需要reload(utils)才能生效? @user697911 -- 您需要第一次导入才能获得重新加载的引用。每个导入首先检查模块是否已经导入。如果是,则不会再次导入。

以上是关于在这种情况下,“重新加载”会做啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在不重新加载的情况下更改标头 URL? [复制]

如何在不重新加载页面的情况下更改内容? [复制]

如果构造函数中发生错误,Qt 会做啥? [复制]

eclipse实现热部署和热启动

在不重新加载 web 视图的情况下更改 html 文本颜色

Javascript 重新加载页面