Import auf Modulebene oder auf Funktionsebene?

10

Welcher Stil ist vorzuziehen?

Stil A:

%Vor%

Stil B:

%Vor%

Angenommen, some_module wird nicht an anderer Stelle im Code verwendet, sondern nur innerhalb dieser Funktion.

    
wim 08.03.2012, 07:08
quelle

2 Antworten

19

Wie bereits erwähnt, ist es in der Regel am besten, die PEP 8-Empfehlung zu befolgen und Ihre Importe ganz oben zu erledigen. Es gibt jedoch einige Ausnahmen. Der Schlüssel zum Verständnis liegt in Ihrer eingebetteten Frage in Ihrem zweiten Absatz: "In welchem ​​Stadium geschieht der Import?"

Import ist eigentlich eine ausführbare Anweisung. Wenn Sie ein Modul importieren, werden alle ausführbaren Anweisungen im Modul ausgeführt. "def" ist auch eine ausführbare Anweisung; Bei seiner Ausführung wird der definierte Name dem (bereits kompilierten) Code zugeordnet. Also wenn du hast:

%Vor%

In einem Modul, das Sie importieren, werden die (kompilierten) Import- und Rückgabeanweisungen an diesem Punkt mit dem Namen "f" verknüpft. Wenn Sie f () ausführen, wird die Importanweisung dort ausgeführt.

Wenn Sie den Import von "sehr groß" oder "schwer" verzögern und die Funktion nie ausführen (in diesem Fall f), wird der Import nicht ausgeführt. Dies spart Zeit (und auch etwas Platz). Natürlich, sobald Sie f () aufrufen, passiert der Import (wenn es bereits passiert ist, sobald Python das gecachete Ergebnis verwendet, aber es muss noch überprüft werden), so verlieren Sie Ihren Zeitvorteil.

Als Faustregel gilt daher: "Importieren Sie alles ganz oben", bis Sie eine Menge Profilerstellung durchgeführt haben und festgestellt haben, dass das Importieren von "Riesen" viel Zeit in 90% Ihrer Läufe verschwendet wenig Zeit in 10% von ihnen.

    
torek 08.03.2012, 07:29
quelle
7

PEP 8 empfiehlt, dass alle Importe im oberen Bereich des Moduls vorgenommen werden. Alle Namen, einschließlich derjenigen, die an Module gebunden sind, werden in dieser Reihenfolge in den lokalen, nicht lokalen, globalen und integrierten Bereichen gesucht.

    
Ignacio Vazquez-Abrams 08.03.2012 07:11
quelle

Tags und Links