/ / Unterschied zwischen dem Importieren einer Python-Bibliothek innerhalb einer Funktion und dem globalen Importieren? - Python, Python-3.x, Python-Import

Unterschied zwischen dem Import der Python-Bibliothek innerhalb der Funktion im Vergleich zum globalen Import? - Python, Python-3.x, Python-Import

Angenommen, ich möchte eine Python-Bibliothek zur Verwendung in einer Funktion importieren. Ist es besser, die Bibliothek innerhalb der Funktion oder global zu importieren?

Mach das

def test_func:
import pandas as pd
# code implementation

oder muss die zeile unten oben in der python-datei global importiert werden?

import pandas as pd

Welche Vor- und Nachteile hat jeder Ansatz? Welches ist die beste Praxis in Python?

Ich benutze Python v3.6

EDIT: Einige Klarstellungen zu machen.

Angenommen, ich habe 2 Funktionen.

def func1:
import pandas as pd
# code implementation

def func2:
import pandas as pd
# code implementation

Das Python-Skript führt beide Funktionen aus. Wird die Bibliothek zweimal importiert oder ist der Python-Compiler intelligent genug, um sie nur einmal zu importieren? Dies hat Auswirkungen auf die Leistung.

Antworten:

3 für die Antwort № 1

Es ist ein Unterschied in der Sichtbarkeit von Namen undAusführungszeitpunkt. Der Import auf Modulebene wird importiert, wenn die zu ladende Datei importiert wird oder selbst ausgeführt wird. Die Funktion local wird offensichtlich nur ausgeführt, wenn die Funktion ausgeführt wird. Die importierten Namen sind entweder für alle Elemente in der Datei sichtbar oder nur innerhalb der Funktion, in der der Import ausgeführt wird.

Da es Kosten gibt, um die Importabrechnung zu treffen (wenn auch eine kleine, aber immer noch), wird die lokale Abrechnung kosten immer nicht nur einmal ausführen. Das Modul wird jedoch nicht vollständig neu importiert, da Python die Module nach dem ersten Import zwischenspeichert (siehe reload und sys.modules).

Die beste Vorgehensweise ist eindeutig, die Modulebene zu verwendenimportiert, und das ist es, was Sie in 99,999% des Codes sehen. Ein großer Grund ist die Wartbarkeit - wenn Sie verstehen möchten, welche Abhängigkeiten ein Modul hat, ist es praktisch, nur ganz oben zu schauen, anstatt alle zu durchkämmen Code.

Also, wann soll die Funktion lokale Importe verwenden?

Es gibt drei Szenarien:

  • Sie können den Import nicht früher verwenden. Dies geschieht, wenn beispielsweise ein Backend für eine Datenbank oder ein anderes System / eine andere Funktionalität zur Laufzeit durch Konfiguration oder Systemüberprüfung ausgewählt wird.

  • Sie haben sonst zirkuläre Importe. Dies ist ein seltener Fall und auch ein Code-Geruch. Wenn dies erforderlich ist, sollten Sie eine Umgestaltung in Betracht ziehen.

  • Verkürzung der Startzeit durch Verschiebung des Modulimports. Dies ist jedoch sehr selten nützlich.

Für Ihren Fall lautet die Antwort also schnell und einfach "Don't do it".


1 für die Antwort № 2

Das Modul wird geladen, wenn Sie es importieren. Wenn Sie also ein selten verwendetes Modul importieren müssen, dessen Initialisierung jedoch viel Zeit kostet, sollten Sie es bei Bedarf importieren.

Wenn es uns nur um Leistung, aber nicht um Lesbarkeit geht, ist es vielleicht immer besser, Module zu importieren, wenn wir sie wirklich brauchen.

Aber wir müssen unser Programm wartbar halten. Das Importieren aller Module oben ist die expliziteste Methode, um anderen zu sagen und selbst zu bestimmen, welche Module verwendet werden.

Fazit: Wenn Sie wirklich ein sehr teures, aber selten verwendetes Modul haben, sollten Sie es lokal importieren. Andernfalls sollten Sie sie oben importieren.