MyTetra Share
Делитесь знаниями!
Импорт скриптов (библиотек) в Python
Время создания: 13.03.2015 00:03
Раздел: Компьютер - Программирование - Язык Python
Запись: xintrea/mytetra_syncro/master/base/1426194193q1gvd020z1/text.html на raw.github.com

Импорт в Python


Ещё одна интересная вещь — импорты. Своеобразный альтернативный взгляд на неймспейсы с обязательным использованием.

В PHP ты написал require_once и дальше тебе это доступно, пока жива PHP-шная сессия выполнения. Обычно при использовании CMS люди запихивают всё в классы, а классы располагают в специальных местах, и пишут свою маленькую функцию, которая знает эти места и регистрируют её через spl_autoload_register в самом начале файла.

В питоне каждый файл — своя область видимости. И в нём будет доступно только то, что вы в него подгрузите. По умолчанию доступна только стандартная библиотека питона (около 80 функций). Но давайте лучше на примере:

Допустим, вы сделали файл tools/logic.py

def is_prime(number):

max_number = int(sqrt(number))


for multiplier in range(2, max_number + 1):

if multiplier > max_number:

break

if number % multiplier == 0:

return False


return True



И теперь хотите его использовать в файле main.py. В этой ситуации вам необходимо импортировать или весь файл или нужные вам части в файл, где вы работаете.

from tools.logic import is_prime


print(is_prime(79))


И так абсолютно везде. Почти все файлы на питоне начинаются с импортов в текущий файл вспомогательных питонячих объектов: ваших и встроенных библиотек. Это всё равно как если бы функции в PHP вида mysqli_*, pdo_*, memcached_*, а также весь ваш код находились только в неймспейсах, и вам приходилось бы каждый раз их импортировать в каждом файле. Какие преимущества у такого подхода?

  • Во-первых: под одинаковым именем в разных файлах могут быть разные объекты. Но именно вы решаете, что и под каким именем будет использовано конкретно здесь.
  • Во-вторых: резко упрощается рефакторинг. Вы всегда можете отследить класс, функцию или другую сущность. Простейший поиск показывает, где она используется и как.
  • В-третьих: это принудительно заставляет разработчиков минимально продумывать структуру организации кода.


Из минусов можно отметить только появление такого эффекта как циклические импорты, но, во-первых, это редкое явление, во-вторых, это штатная ситуация и вполне понятно, как с ней бороться.

Удобно ли каждый раз прописывать импорты? Это зависит от вашего склада ума. Если вам нравится больший контроль над кодом, то вы предпочтёте прописывание импортов, чем их отсутствие. В некоторых командах существует даже своя система правил, описывающих в каком порядке можно подключать внешний код для минимизации циклических импортов до минимума. Если в вашей команде нет таких правил и вы не хотите особо заморачиваться, то можно просто положиться на IDE, которая автоматически проставит импорты для всего, что вы используете. Ну и в довесок: импорты не уникальная особенность питона, в Java и C# тоже есть импорты, вроде никто не жаловался.



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования