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

from utils import *

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

【问题讨论】:

标签: python python-2.7


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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


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

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

    【讨论】:

    • 为什么“副作用”需要再次发生?
    • @user697911 -- 我不知道为什么副作用需要再次发生:-)。我什至不知道utils 副作用。
    • “编辑”一个模块后,您必须再次运行该模块,并且当您运行该模块时,会再次执行第一个“import utils”。为什么需要reload(utils)才能生效?
    • @user697911 -- 您需要第一次导入才能获得重新加载的引用。每个导入首先检查模块是否已经导入。如果是,则不会再次导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多