Auszug aus dem Python-Lernhandbuch für das Protokoll.
Der Client kann die Import- oder From-Anweisung ausführen. Wenn das Modul nicht geladen wird, suchen diese Anweisungen, kompilieren und führen das Moduldateiprogramm aus. Der Hauptunterschied besteht darin, dass Import das gesamte Modul liest, sodass es definiert werden muss, bevor sein Variablenname gelesen werden kann; from erhält (oder kopiert) modulspezifische Variablennamen.
Import bezieht einen Variablennamen auf das gesamte Modulobjekt, sodass die Eigenschaften des Moduls durch den Modulnamen (z. B. module1.printer) erhalten werden müssen. und from kopiert den Variablennamen in einen anderen Scope, sodass der kopierte Variablenname direkt im Skript verwendet werden kann, ohne ein Modul (z. B. Drucker) durchlaufen zu müssen.
From Statement hat das Potenzial, Namensräume zu brechen. Wenn du Variablen mit from importierst und diese Variablen zufällig mit bestehenden Variablen im Scope dupliziert werden, werden die Variablen leise überschrieben. Dies ist bei der Verwendung von Import-Anweisungen kein Problem, da deren Inhalt durch den Modulnamen erhalten werden muss. Bei Verwendung von from ist das in der Praxis jedoch kein großes Problem, solange man das versteht und erwartet, besonders wenn man die Namen der Importvariablen klar auflistet (z. B. from Module import x, y, z).
Andererseits hat die from-Anweisung, wenn sie mit dem Reload-Aufruf verwendet wird, ein ernsthaftes Problem, da der importierte Variablenname sich auf eine frühere Version des Objekts beziehen kann. Außerdem kann das Formular aus dem Modulimport * tatsächlich den Namensraum unterbrechen und Variablennamen schwer verständlich machen, insbesondere beim Import mehrerer Dateien.
Ein pragmatischerer Vorschlag ist, dass einfache Module im Allgemeinen eher Import als From verwenden. Die meisten from-Anweisungen werden verwendet, um die gewünschten Variablen explizit aufzuzählen, und sind darauf beschränkt, das Formular * nur einmal pro Datei zu verwenden. Auf diese Weise kann jeder undefinierte Variablenname als existierend im von * referenzierten Modul betrachtet werden. Du musst wirklich Import verwenden, wenn du denselben Variablennamen verwenden musst, der in zwei verschiedenen Modulen definiert ist, in diesem Fall kannst du from nicht verwenden.
Ich habe viel geredet, ich weiß nicht, was ich sagen soll, lass uns kurz darüber sprechen.
- import Modul # Module einführen
- aus Modulimport Sonstiges # Führen Sie Klassen, Funktionen oder Variablen im Modul ein
- aus Modulimport * # Alle 'öffentlichen' Mitglieder im Modul einführen
Laienhaft ausgedrückt:
Importiere eine Klasse #把整个一班的学生引入了进来
von einer Gruppe von Importen Xiao Wang #只把一般的小王引入了进来
Zum Beispiel:
Das Zeitpaket ist ein Beispiel, und die folgenden beiden Schreibmethoden sind identisch, wie folgt:
|