在这种情况下,“重新加载”会做啥? [复制]
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 -- 您需要第一次导入才能获得重新加载的引用。每个导入首先检查模块是否已经导入。如果是,则不会再次导入。以上是关于在这种情况下,“重新加载”会做啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章