2016-11-19 1 views
0

Ich habe ein Problem beim erneuten Laden von Modulen, die importiert und in einem anderen Modul verwendet werden. Aus Gründen der Klarheit, lassen Sie uns das Beispiel überlegen, wo ich zwei Module:So laden Sie ein Modul, das in andere Module importiert wurde

Erstes Modul: operation.py

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

zweite Modul: test_operation.py

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

Wenn ich an den Interpreter gehen und schreiben:

import test_operation 

Ich werde 4 gedruckt (z = 4). Wenn ich die Funktion f im ersten Modul operation.py ändern zu sein:

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

und dann schreibe ich im Interpreter reload (test_operation), werde ich noch 4 statt 5 gedruckt werden Es scheint also, dass es lädt das Modul test_operation.py neu, aber das Modul operation.py, das in test_operation.py importiert wird, wird nicht neu geladen.

Wie löse ich ein solches Problem? Und wie stelle ich im Allgemeinen sicher, dass alle importierten Module in meinem Code jedes Mal neu importiert (oder neu geladen) werden, wenn sie geändert werden?

+0

Verwenden Sie 'reload (Operation)', dann 'reload (test_operation)'. – Uriel

+0

Sie laden das bereits importierte Modul auf Speicher nach Ihrer Änderung in operation.py nicht das neue mit Ihrer Bearbeitung –

+0

Ich verstehe, dass ich Module einzeln nacheinander von Hand laden kann, aber gibt es eine automatische Methode, die ein Modul neu laden und all seine importierten Module, und geht so rekursiv? Gibt es ein tiefes Nachladen (wie es eine Kopie und eine tiefe Kopie gibt)? –

Antwort

0

Vom Dolmetscher: nur operation nachladen innerhalb test_operation Modul Kontext vollständigen Pfad mit:

reload(test_operation.operation) 

In test_operation.py, könnten Sie reload(operation) so nennen Nachladen test_operation auch operation

für volle rekursive Reload Check nachladen würde hier (nicht sicher, ob es eine gute Idee ist ...): Recursive version of 'reload'

+0

Ja, tatsächlich, was du gesagt hast, funktioniert. Ich habe auch den Link überprüft, den Sie für das rekursive Reload geteilt haben, es ist eine Adhoc-rekursive Funktion. Ich dachte, dass es eine eingebaute Methode wie Neuladen gibt, weil es, wenn es viele Module gibt, die neu geladen werden sollten, und dieselben Module andere Module importieren, die neu geladen werden sollten, könnte es eine langsame Prozedur sein, dies von Hand zu tun. Warum denkst du nicht, dass rekursives Nachladen keine gute Idee ist? –

+0

Nachladen alles kann langsam sein, das ist alles. –

+0

Ja, ich verstehe, aber gibt es eine eingebaute Funktion, das zu tun? Wie neu laden? (so wird es ähnlich sein, was von copy und decopy bereitgestellt wird) –

Verwandte Themen