编辑:哎呀,阿什维尼·乔杜里比我还快:)
在发布这篇文章之前应该做更多的研究。在
我将回答我自己的问题:希望你们中的一些人对此感兴趣。在
假设我已经导入了一次模块:import plop
如果plop.py和{}被删除:
^{pr2}$
但要小心!模块不会从模块dict中删除>>> print repr(sys.modules['plop'])
但是我可以手动删除它>>> del sys.modules['plop']
>>> import plop
ImportError: no module named plop
在这个导入错误的例子中:无论我在哪里已经导入了模块,代码仍然绑定到导入时选择的本地变量名-通常是模块名-。该模块仍然存在于我的运行时中。在
所以我又做了一点实验。在
如果在代码的某个地方,我碰巧从模块中导入了一个函数,不管重载是否有效,我仍然会有一个对旧函数的引用。在>>> from plop import somefunc
>>> somefunc()
i am the first version!
>>> # code is regenerated
>>> reload(plop)
>>> # should print "i am the second version!"
>>> somefunc()
i am the first version!
如果我使用plop.somefunc(),那么对于重新加载工作的情况,我会是最新的。在
我的结论是:当我重新加载模块时,我应该始终小心,重新导入我需要使用的任何东西,不管是模块还是模块字段。如果没能重新装弹,我应该清理一下系统模块迪克特