- Модули в Python
- Что такое модуль
- Как импортировать модули
- С помощью ключевого слова import
- Присвоить произвольное имя модулю
- Использовать инструкцию from. import
- Импортировать все имена
- Как Python ищет модули
- Как перезагрузить модуль
- Зачем нужна встроенная функция dir()
- Пример использования dir в модуле example
- Где хранятся модули в Python?
- Команда import в Python
- Команда from . import
- Команда from . import *
- Так где хранятся модули в Python?
- Получаем список всех модулей Python
- Создаём свой модуль в Python
- Функция dir() в Python
- Пакеты модулей в Python
Модули в Python
В этой статье вы научитесь создавать и импортировать собственные модули в Python. Также вы узнаете несколько полезных лайфхаков, связанных с импортом и использованием модулей.
Что такое модуль
Модуль — файл, в котором содержатся переменные и методы.
К примеру, example.py — это модуль, example — его имя.
Модули позволяют разбивать огромные программы на небольшие кусочки кода, которыми легко управлять и организовывать. Также это позволяет использовать код повторно.
Делается это просто — мы объявляем все часто используемые функции в модуле и импортируем его. И все: больше не нужно копировать и вставлять код.
Давайте создадим модуль. Напишите следующий код и сохраните его с именем example.py .
# пример модуля def add(a, b): """Эта программа складывает два числа и возвращает результат""" result = a + b return result
В модуле example.py мы объявили функцию add() . Эта функция принимает в качестве аргументов два числа и возвращает их сумму.
Как импортировать модули
Импортировать функции, классы и методы можно из одного модуля в другой или в интерактивный интерпретатор.
Для этого используется ключевое слово import . Чтобы импортировать ранее написанный модуль example , введите следующее:
Нужно понимать, что имена функций из example напрямую в таблицу имен не импортируются — импортируется лишь имя модуля example .
Доступ к методам и функциям модуля осуществляется с помощью оператора . . Например:
У Python есть множество полезных стандартных модулей — здесь можно посмотреть полный список и инструкции по применению. Модули находятся в директории Lib , а она в свою очередь в папке, где установлен Python.
Стандартные модули импортируются так же, как и ваши собственные.
Ниже представлены несколько способов импортирования модулей.
С помощью ключевого слова import
Инструкция import предназначена для импортирования модулей в вашу программу. Как было сказано выше, оператор точка . позволяет получить доступ к функциям и методам модуля. Например:
# пример импортирования # стандартного модуля math import math print("Значение π равно", math.pi)
Значение π равно 3.141592653589793
Присвоить произвольное имя модулю
Модулю можно присвоить произвольное имя. Например:
# импортирует модуль с присвоением произвольного имени import math as m print("Значение π равно", m.pi)
Здесь мы переименовали модуль math в m — так мы сэкономим свое время.
Будьте бдительны — math в нашей области видимости теперь недоступен. То есть, правильным вариантом будет m.pi . math.pi работать не будет.
Использовать инструкцию from. import
from позволяет импортировать определенные объекты из модуля. Благодаря нему отпадает необходимость импорта модуля целиком.
# импортирует только значение π из модуля math from math import pi print("Значение π равно", pi)
В этой программе мы импортировали из модуля math только константу pi .
В данном случае оператор точка . не нужен. Импортировать можно и несколько объектов:
>>> from math import pi, e >>> pi 3.141592653589793 >>> e 2.718281828459045
Импортировать все имена
Мы можем импортировать все имена (объекты) из модуля. Делается это так:
# импортирует все имена из модуля math from math import * print("Значение пи равно", pi)
В последней конструкции мы импортировали все имена из модуля math .
Импорт всех объектов с помощью звездочки * — не лучшая идея, поскольку это может привести к конфликтам с вашими объектами. К тому же, такой подход снижает читаемость кода.
Как Python ищет модули
Во время импорта Python проверяет несколько директорий. Сначала интерпретатор просматривает встроенные модули. Если среди них нужного имени не оказалось, Python начнет просматривать директории в sys.path. Порядок поиска такой:
- Текущая директория.
- PYTHONPATH (переменная окружения со списком каталогов).
- Каталог по умолчанию — он зависит от установки.
>>> import sys >>> sys.path ['', 'C:\\Python33\\Lib\\idlelib', 'C:\\Windows\\system32\\python33.zip', 'C:\\Python33\\DLLs', 'C:\\Python33\\lib', 'C:\\Python33', 'C:\\Python33\\lib\\site-packages']
Этот список можно пополнять собственными директориями.
Как перезагрузить модуль
Интерпретатор Python импортирует модуль за сессию лишь раз — это эффективно. Пример того, как это работает.
Допустим, в модуле my_module написан следующий код:
# этот модуль показывает как импортируется # несколько модулей и их перезагрузка print("Код выполнен")
>>> import my_module Код выполнен >>> import my_module >>> import my_module
Как видите, код выполняется лишь раз. Это значит, что наш модуль импортируется только один раз.
Если вы измените модуль во время написания программы, вам нужно его перезагрузить. Один из способов — перезапустить интерпретатор. Но это не лучший вариант.
В Python есть куча способов сделать это эффективнее — например, функция reload() в модуле imp . Делается это так:
>>> import imp >>> import my_module Код выполнен >>> import my_module >>> imp.reload(my_module) Код выполнен
Зачем нужна встроенная функция dir()
С помощью функции dir() мы можем увидеть список все атрибуты внутри модуля.
Например, мы объявили функцию add() в модуле example — его мы реализовали еще в начале статьи.
Пример использования dir в модуле example
>>> dir(example) ['__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', 'add']
Эта функция возвращает отсортированный список атрибутов (вместе с add ). Атрибуты, начинающиеся с подчеркивания, определяются не пользователем, а автоматически закрепляются за модулем.
Например, атрибут __name__ содержит имя модуля.
>>> import example >>> example.__name__ 'example'
Чтобы узнать все атрибуты, определенные в текущем пространстве имен, вызовите функцию dir() без аргументов.
СodeСhick.io — простой и эффективный способ изучения программирования.
2023 © ООО «Алгоритмы и практика»
Где хранятся модули в Python?
Система модулей даёт возможность логически организовать код на Python. Кроме того, группирование в модули значительно облегчает сам процесс написания кода, плюс делает его более понятным. В этой статье поговорим, что такое модуль в Python, где он хранится и как обрабатывается.
Модуль в Python — это файл, в котором содержится код на Python. Любой модуль в Python может включать в себя переменные, объявления функций и классов. Вдобавок ко всемe, в модуле может содержаться исполняемый код.
Команда import в Python
Позволяет использовать любой файл Python в качестве модуля в другом файле. Синтаксис прост:
import module_1[, module_2[. module_N]Как только Python-интерпретатор встречает команду import, он выполняет импорт модуля, если он есть в пути поиска Python. Что касается пути поиска Python, то речь идёт о списке директорий, в которых интерпретатор выполняет поиск перед загрузкой модуля. Посмотрите на пример кода при использовании модуля math:
import math # Используем функцию sqrt из модуля math print (math.sqrt(9)) # Печатаем значение переменной pi, определенной в math print (math.pi)Помните, что модуль загружается только один раз, вне зависимости от того, какое количество раз вы его импортировали. Таким образом исключается цикличное выполнение содержимого модуля.
Команда from . import
Команда from . import даёт возможность выполнить импорт не всего модуля целиком, а лишь конкретного его содержимого:
# Импортируем из модуля math функцию sqrt from math import sqrt # Выводим результат выполнения функции sqrt. # Нам больше незачем указывать имя модуля print (sqrt(144)) # Но мы уже не можем получить из модуля то, что не импортировали print (pi) # Выдаст ошибкуОбратите внимание, что выражение from . import не импортирует модуль полностью, а лишь предоставляет доступ к объектам, указанным нами.
Команда from . import *
Также в Python мы можем импортировать из модуля переменные, классы и функции за один раз. Чтобы это выполнить, применяется конструкция from . import *:
from math import * # Теперь у нас есть доступ ко всем функция и переменным, определенным в модуле math print (sqrt(121)) print (pi) print (e)
Использовать данную конструкцию нужно осторожно, ведь при импорте нескольких модулей можно запутаться в собственном коде.
Так где хранятся модули в Python?
При импорте модуля, интерпретатор Python пытается найти модуль в следующих местах: 1. Директория, где находится файл, в котором вызывается команда импорта. 2. Директория, определённая в консольной переменной PYTHONPATH (если модуль не найден с первого раза). 3. Путь, заданный по умолчанию (если модуль не найден в предыдущих двух случаях).
Что касается пути поиска, то он сохраняется в переменной path в системном модуле sys. А переменная sys.path включает в себя все 3 вышеописанных места поиска.
Получаем список всех модулей Python
Чтобы получить полный список модулей, установленных на ПК, используют команду help("modules") .
Создаём свой модуль в Python
Для создания собственного модуля в Python нужно сохранить ваш скрипт с расширением .py. После этого он станет доступным в любом другом файле. Давайте создадим 2 файла: module_1.py и module_2.py, а потом сохраним их в одной директории. В первом файле запишем:
def hello(): print ("Hello from module_1")А во втором вызовем функцию:
from module_1 import hello hello()После выполнения кода 2-го файла получим:
Функция dir() в Python
Возвратит отсортированный список строк с содержанием всех имён, определенных в модуле.
# на данный момент нам доступны лишь встроенные функции dir() # импортируем модуль math import math # теперь модуль math в списке доступных имен dir() # получим имена, определенные в модуле math dir(math)Пакеты модулей в Python
Несколько файлов-модулей с кодом можно объединить в пакеты модулей. Пакет модулей — это директория, включающая в себя несколько отдельных файлов-скриптов.
Представьте, что у нас следующая структура:
|_ my_file.py |_ my_package |_ __init__.py |_ inside_file.py
В файле inside_file.py определена некоторая функция foo. В итоге, дабы получить доступ к этой функции, в файле my_file нужно выполнить:
from my_package.inside_file import fooТакже нужно обратить внимание на то, есть ли внутри директории my_package файл init.py. Это может быть и пустой файл, сообщающий Python, что директория является пакетом модулей. В Python 3 включать файл init.py в пакет модулей уже не обязательно, но мы рекомендуем всё же делать это, чтобы обеспечить обратную совместимость.