Wie lade ich das Python-Modul neu, das mit `from module import *` importiert wurde
Sah ich in dieses nützliche Q&A die man nutzen kann reload(whatever_module)
oder in Python 3, imp.reload(whatever_module)
.
Meine Frage ist, was ist, wenn ich gesagt hatte from whatever_module import *
zu importieren? Dann habe ich keine whatever_module
zu finden, wenn ich reload()
. Sind Euch werde anschreien, mich für das werfen einer ganzen module in den globalen namespace? 🙂
InformationsquelleAutor der Frage murftown | 2011-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stimme mit der "don' T tun dies in der Regel" Konsens, aber...
Die richtige Antwort ist:
InformationsquelleAutor der Antwort Catskul
Verwenden Sie niemals
import *
; es zerstört die Lesbarkeit.Beachten Sie auch, dass Neuladen von Modulen ist fast nie sinnvoll. Man kann nicht Vorhersagen, in welchem Zustand sich Ihr Programm endet nach dem erneuten laden eines Moduls, so ist es ein guter Weg, um unverständlich, unreproduceable bugs.
InformationsquelleAutor der Antwort Allen
Einen
nimmt alle "exportiert" werden Objekte aus
module
und bindet Sie auf Modul-Ebene (oder was auch immer-Ihr-scope-war-level -) Namen. Sie kann reload Modul:aber das wird nicht tun Sie etwas gutes: das was-Ihr-scope-war-level-Namen immer noch auf die alten Objekte.
InformationsquelleAutor der Antwort tzot
Beim Import mit
from whatever_module import whatever
whatever
zählt als Teil des Import-Moduls, so zu laden es - sollten Sie laden Ihre module. Aber einfach nachladen Ihres Moduls erhalten Sie noch die altenwhatever
- aus den bereits importiertenwhatever_module
so dass Sie brauchen, um neu zu laden(whatever_module), und als laden-Modul:wenn Sie
from whatever_module import whatever
können Sie auch prüfen,oder
InformationsquelleAutor der Antwort Ohad Cohen
Einen Reiniger Antwort ist eine Mischung aus Catskul die gute Antwort und Ohad Cohen ist die Verwendung von
sys.module
und direkte Neudefinition:In der Tat
import X
erstellt ein neues symbol (X
), die möglicherweise neu definiert werden in der folgende code, der unnötig ist (wobeisys
ist ein gemeinsames Modul, also das sollte nicht passieren).Der interessante Punkt ist hier, dass
from X import Y
nicht hinzufügenX
auf den namespace, fügt aber hinzu, ModulX
zu der Liste der bekannten Module (sys.modules
), die es erlaubt, das Modul neu geladen (und die neuen Inhalte, auf die zugegriffen).Allgemein, wenn mehrere importierte Symbole aktualisiert werden müssen, ist es dann bequemer, importieren Sie wie folgt:
InformationsquelleAutor der Antwort Eric Lebigot
InformationsquelleAutor der Antwort jennifer