2016-12-29 112 views

回答

1

在这种情况下,'reload'会做什么?

那要看是什么utils不...例如,如果进口utils有副作用,那么效果会再次发生。


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

  • 加载模块
  • 测试一下,看看错误
  • 编辑模块
  • 刷新模块
  • 测试出来
  • ...
+0

内置的功能为什么“副作用”需要发生再次? – user697911

+0

@ user697911 - 我不知道为什么副作用需要再次发生:-)。我甚至不知道'utils'是否有副作用。 – mgilson

+0

“编辑”模块后,必须再次运行模块,并且在运行模块时,第一个“导入使用情况”将再次执行。为什么你需要重新加载(utils)来获得效果? – user697911

2

找出来的最佳方法是检查reload document,它说:

  1. Python模块的代码重新编译和模块级代码重新执行,定义一组新的这必将对名称在模块的字典对象。扩展模块的初始化函数不是第二次调用。

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

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

  4. 其他引用旧物(如外部模块名称)不反弹来引用新对象,必须在如果需要他们发生的每个命名空间进行更新。