2016-11-19 80 views
0

我在重新加载导入并在不同模块中使用的模块时遇到问题。为了清楚起见,让我们考虑在那里我有两个模块的例子:如何重新加载在其他模块中导入的模块

第一个模块:operation.py

def f(x,y): 
    return x+y 

第二个模块:test_operation.py

import operation 
x=3 
y=4 
z= operation.f(x,y) 
print z 

如果我去解释和写:

import test_operation 

我会得到4打印(z = 4)。如果我更改了第一个模块operation.py函数f是:

def f(x,y): 
    return x+y+1 

,然后我在解释重装(test_operation)写的,我仍然会得到4印刷5.相反,它似乎那么它重新加载模块test_operation.py,但它不会重新加载test_operation.py中导入的模块operation.py。

我该如何解决这个问题?在一般情况下,如何确保每次更改代码时,我的代码中的所有导入模块都会重新导入(或重新加载)?

+0

使用'reload(operation)',然后'reload(test_operation)'。 – Uriel

+0

你正在重新加载内存中已经导入的模块,在您更改operation.py后,您的编辑不是新的 –

+0

我明白,我可以手动重新加载模块,但有一个更自动的方法,重新加载模块和它所有的导入模块,并递归这样呢?是否有深层重载(如有副本和深层复制)? –

回答

0

从解释:只是test_operation模块范围内使用完整路径重装operation

reload(test_operation.operation) 

test_operation.py,你可以调用reload(operation)所以重装test_operation也将重装operation

完全递归重装点击这里(不知道这是个好主意......):Recursive version of 'reload'

+0

是的,的确如你所说的那样。我也检查了你递归重载的共享链接,这是一个专门构建的递归函数。我认为有一个像reload这样的内置方法,因为如果有许多模块需要重新加载,并且那些相同的模块导入了其他应该重新加载的模块,那么手动执行这个过程可能会很慢。你为什么不认为递归重载不是一个好主意? –

+0

重装一切可能会很慢,就这些。 –

+0

是的,我明白了,但有没有一个内置的功能来做到这一点?像重新加载? (所以它与复制和深层复制提供的内容相似) –