在这种情况下,“reload”是什么意思?

4
import utils; reload(utils)

from utils import *

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

reload是Python 2中的内置函数。https://docs.python.org/2/library/functions.html#reload - Patrick Haugh
2个回答

2

查找最佳方法是查看reload文档,其中写道:

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

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

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

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


1

在这种情况下,“reload”是什么意思?

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


请注意,在任何生产代码中使用reload都是您想要避免的。 reload存在的主要原因是为了交互式使用...
  • 加载模块
  • 测试并发现错误
  • 编辑模块
  • 重新加载模块
  • 再次测试
  • ...

为什么需要再次发生“副作用”? - user697911
@user697911 -- 我不知道为什么副作用需要再次发生 :-). 我甚至不知道 utils 是否有任何副作用。 - mgilson
在“编辑”模块之后,您必须再次运行该模块,当您运行该模块时,第一个“import utils”将再次执行。为什么需要重新加载(utils)才能获得效果? - user697911
@user697911 -- 你需要第一个import来引用reload。每个import首先检查模块是否已经被导入过了,如果已经被导入了,那么就不会再次被导入。 - mgilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接