/ / Разлика между импортирането на Python библиотека във функцията в сравнение с импортирането в световен мащаб? - python, python-3.x, python-import

Разлика между импортирането на библиотеката на Python в рамките на функцията спрямо вноса в глобален мащаб? - python, python-3.x, питън-импорт

Да предположим, че искам да импортирам Python библиотека за използване във функция. По-добре ли е да импортирате библиотеката във функцията или да я импортирате глобално?

Направите това

def test_func:
import pandas as pd
# code implementation

или линията по-долу в горната част на Python файла да се импортира глобално?

import pandas as pd

Какви са предимствата и недостатъците на всеки подход? Коя е най-добрата практика в питона?

Използвам python v3.6

EDIT: Някои пояснения, които трябва да направите.

Да предположим, че имам 2 функции.

def func1:
import pandas as pd
# code implementation

def func2:
import pandas as pd
# code implementation

Python скрипта изпълнява и двете функции. Библиотеката ще се импортира два пъти или пък компилаторът на Python е достатъчно интелигентен, за да го импортира само веднъж? Това има последици за изпълнението.

Отговори:

3 за отговор № 1

Това е разлика в видимостта на името иточка на изпълнение. Импортирането на ниво модул се импортира, когато файлът, който зареждате, се импортира или изпълнява сам. Функцията локална явно само ако функцията се изпълнява. Импортираните имена са видими за всички неща във файла или само във функцията, в която се изпълнява импортирането.

Тъй като има цена за излизане на декларацията за внос (макар и малка, но все пак), местната ще го направи винаги изпълни, не само веднъж. Въпреки това, той няма да възстанови изцяло повторно модула, Python кешира модулите, след като бъдат импортирани за първи път (вж reload и sys.modules).

Най-добрата практика е да се използва модулно нивовнос и това, което виждате в 99.999% от кода. Огромна причина е поддръжката - ако искате да разберете какви зависимости има един модул, е удобно просто да погледнете отгоре, вместо да се налага да миете всички код.

И така, кога да използваме функцията местен внос?

Има три сценария:

  • това не се случва, когато например при бекенд за db или друга система / функционалност е избрана по време на изпълнение чрез проверка или проверка на системата.

  • в противен случай имате кръгов внос. Това е рядък случай и мирис на код, така че ако това е необходимо, помислете за рефакторинг.

  • намаляване на времето за стартиране чрез отлагане на вноса на модули. Това обаче е много рядко полезно.

Така че за вашия случай, отговорът е бърз и прост "не го направи".


1 за отговор № 2

Модулът ще бъде зареден, когато го импортирате, така че ако трябва да импортирате рядко използван модул, но струва много време за инициализиране, трябва да го импортирате, когато имате нужда от него.

Всъщност, ако се интересуваме само от производителността, но не и от четливостта, може би винаги е по-добре да импортираме модул, когато наистина се нуждаем от него.

Но ние трябва да поддържаме нашата програма подържана. Импортирането на всички модули отгоре е най-категоричният начин да се разкажат на другите и самият автор, кои модули се използват.

За да обобщим, ако наистина имате много скъп, но рядко използван модул, трябва да го импортирате локално. В противен случай трябва да ги импортирате отгоре.