2016-11-19 24 views
0

インポートして別のモジュールで使用するモジュールを再ロードする際に問題があります。明確にするために、のは、私は2つのモジュールを持っている例を考えてみましょう:他のモジュールにインポートされたモジュールを再ロードする方法

最初のモジュール: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にインポートされたモジュールのoperator.pyをリロードしません。

このような問題を解決するにはどうすればよいですか?一般的に、コード内のインポートされたモジュールが変更されるたびに再インポート(または再読み込み)されるようにするにはどうすればよいですか?インタプリタから

+0

'reload(operation)'、 'reload(test_operation)'を使用します。 – Uriel

+0

既にインポートされたモジュールを変更後にメモリに再ロードしています。編集した新しいものはありません。 –

+0

モジュールを手作業でリロードすることができますが、モジュールをリロードする自動化メソッドがあります。すべてのインポートされたモジュールは、このような再帰的に行く?深いリロードがある(コピーと深いコピーがあるように)? –

答えて

0

:ちょうど完全なパスを使用してtest_operationモジュールのコンテキスト内operationをリロード:test_operation.py

reload(test_operation.operation) 

を、あなたはそうtest_operationもここに完全な再帰的なリロードチェックのためにoperation

をリロードしてしまうリロードreload(operation)を呼び出すことができます(それはよいアイデアではないのです...):Recursive version of 'reload'

+0

はい、あなたが言ったことは確かです。私はあなたが再帰的なリロードのために共有したリンクもチェックしました。それは逐語的な再帰的な関数です。私はリロードのような組み込みメソッドがあると思った。なぜなら、リロードされるべきモジュールがたくさんあり、同じモジュールがリロードされるべき他のモジュールをインポートするからである。再帰的なリロードは良い考えではないと思いませんか? –

+0

すべてをリロードするのが遅いかもしれません。 –

+0

はい、わかりましたが、これを行うための組み込み関数がありますか?リロードのような? (したがって、コピーとディープコピーによって提供されるものに似ています) –

関連する問題