/ / Rozdiel medzi importom knižnice python v rámci funkcie versus importom globálne? - python, python-3.x, python-import

Rozdiel medzi importom pythonskej knižnice v rámci funkcie a globálnej importu? - python, python-3.x, python-import

Predpokladám, že chcem importovať knižnicu python na použitie vo vnútri funkcie. Je lepšie importovať knižnicu v rámci funkcie alebo ju importovať globálne?

To urobiť

def test_func:
import pandas as pd
# code implementation

alebo mať riadok dole v hornej časti súboru python na import globálne?

import pandas as pd

Aké sú výhody a nevýhody každého prístupu? Ktorý je najlepší postup v pythone?

Používam python v3.6

EDIT: Niekoľko objasnení.

Predpokladajme, že mám 2 funkcie.

def func1:
import pandas as pd
# code implementation

def func2:
import pandas as pd
# code implementation

Skript python spúšťa obe funkcie. Bude knižnica importovaná dvakrát alebo je python kompilátor dostatočne chytrý na to, aby ju mohol importovať iba raz? To má vplyv na výkon.

odpovede:

3 pre odpoveď č. 1

Je to rozdiel v viditeľnosti mena ačas realizácie. Import na úrovni modulu sa importuje, keď sa importovaný súbor importuje alebo spustí. Funkcia lokálna funkcia je zrejmá iba vtedy, ak je funkcia spustená. Importované názvy sú buď viditeľné pre všetky veci v súbore, alebo len v rámci funkcie, v ktorej sa import vykonáva.

Keďže existujú náklady na zasiahnutie vyhlásenia o dovoze (aj keď malé, ale stále), miestny bude vždy vykonať, nie len raz. Nebude však úplne reimportovať modul, ale python ukladá moduly do pamäte po ich prvom importovaní (viď reload a sys.modules).

Najlepšie je jasne použiť úroveň moduluDovoz, a to "to, čo vidíte v 99,999% kódu. Obrovským dôvodom je udržiavateľnosť - ak chcete pochopiť, aké závislosti má modul," je vhodné sa len pozrieť na vrchol, namiesto toho, aby ste museli hrebeň cez všetky code.

Takže keď použiť funkciu miestneho dovozu?

Existujú tri scenáre:

  • Tento import sa nedá použiť skôr. Toto sa stane, keď sa napríklad pri konfigurácii alebo pri kontrole systému vyberie backend pre db alebo iný systém / funkčnosť pri behu.

  • inak máte kruhový dovoz. Ide o vzácny prípad a tiež o kódový zápach, takže ak je to potrebné, zvážte refaktorovanie.

  • skrátenie času spúšťania odložením importu modulov. Je to však veľmi zriedka užitočné.

Takže pre váš prípad je odpoveď rýchla a jednoduchá.


1 pre odpoveď č. 2

Modul sa načíta, keď ho importujete, takže ak potrebujete importovať zriedkavo používaný modul, ale stojí veľa času na jeho inicializáciu, mali by ste ho importovať, keď ho potrebujete.

Vlastne, ak sa staráme len o výkon, ale nie o čitateľnosť, možno je vždy lepšie importovať modul, keď ho naozaj potrebujeme.

Musíme však udržiavať náš program udržiavateľný. Importovanie všetkých modulov na vrchole je najexplikovanejší spôsob, ako povedať ostatným a autorom, ktoré moduly sa používajú.

Aby sme to zhrnuli, ak naozaj máte veľmi nákladný, ale zriedka používaný modul, mali by ste ho importovať lokálne. Inak by ste ich mali importovať na vrchole.