Python как и любой другой язык программирования реализует возможность организации кода в виде отдельных модулей (modules) и пакетов (packages), и при необходимости разработчик может импортировать нужный ему код из сторонних библиотек, а так же, создавать свои собственные. В данной заметке речь пойдет именно о том, как правильно импортировать код в скриптах Python.
Вариантов импорта в Python есть несколько, и каждый имеет свои особенности и нюансы использования. Для того чтобы подробно разобрать каждый из них нужно зафиксировать понимание того, что конечной целю любого импортирования кода является доступ к методам или классам которые находятся в другом модуле (файле) или пакете (папке с файлами).
В данной статье мы сосредоточимся на импорте как таковом и не будем фокусировать внимание на том откуда мы делаем импорты из файлов и пакетов, в данном случае нам не нужно знать как именно организован импортируемый код так как работать будет в общем виде одинаково.
Импорт кода в Python делается через ключевое слово import и название модуля.
В этом случае мы импортируем весь модуль к себе в файл и должны все вызовы методов и классов делать от него, как это видно на примере.
Однако, это не всегда удобно и часто возникает ситуация когда нам нужен доступ не ко всем методам модуля, а только к какому-то одному, и вот тут нам на помощь приходит импорт через from.
Тут мы уже можем использовать непосредственно имя метода random который мы импортировали, без необходимости указывать дополнительно ещё и модуль в котором он находится.
Но, что же делать если так получилось что в крупном проекте у нас образовалось несколько модулей с одинаковыми названиями. Такое может произойти, кроме того могут появиться методы с одинаковыми именами или классы. И для того чтобы нам не пришлось бежать и рефакторить все имена модулей или методов в проекте можно воспользоваться конструкцией as.
Теперь мы можем импортировать код, давая ему, в рамках нашего скрипта, любое другое имя, что позволит избежать коллизии имён.
Так же, стоит отметить что можно делать импорт нескольких модулей на одной строке, но это не является хорошей практикой.
Однако, в случае с from этот подход считается допустимым, если кнечно вы не собираетесь перечислять весь код модуля, тогда, вероятно, проще импортировать его целиком.
И на последок, не стоит забывать про так называемый вайлдкард, когда мы импортируем из модуля все методы и классы доступные для импорта под своими собственными именами.
Однако, это тоже является плохой практикой так как в случае колизии имён будет сложно понять что и откуда перекрывает какие имена методов или классов. Старайтесь делать ваш код понятным.
Если хотите прокачаться в Python с нуля, то приглашаю на свой авторский курс Python: Быстрый старт.
Другие варианты импорта и тонкости организации кода рассмотрены мною в видео:
Успехов!
Загляните и в другие статьи:
Что делает if __name__ == "__main__" в Python.
Рекурсия в программировании простыми словами