2016-11-19 79 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

是的,我明白了,但有沒有一個內置的功能來做到這一點?像重新加載? (所以它與複製和深層複製提供的內容相似) –