Модули в Python

В этой статье вы научитесь создавать и импортировать собственные модули в Python. Также вы узнаете несколько полезных лайфхаков, связанных с импортом и использованием модулей. 

Что такое модуль

Модуль — файл, в котором содержатся переменные и методы. 

К примеру, example.py — это модуль, example — его имя. 

Модули позволяют разбивать огромные программы на небольшие кусочки кода, которыми легко управлять и организовывать. Также это позволяет использовать код повторно. 

Делается это просто — мы объявляем все часто используемые функции в модуле и импортируем его. И все: больше не нужно копировать и вставлять код. 

Давайте создадим модуль. Напишите следующий код и сохраните его с именем example.py.

# пример модуля

def add(a, b):
   """Эта программа складывает два числа
            и возвращает результат"""

   result = a + b
   return result

В модуле example.py мы объявили функцию add(). Эта функция принимает в качестве аргументов два числа и возвращает их сумму.

Как импортировать модули

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

Для этого используется ключевое слово import. Чтобы импортировать ранее написанный модуль example, введите следующее: 

>>> import example

Нужно понимать, что имена функций из example напрямую в таблицу имен не импортируются — импортируется лишь имя модуля example.

Доступ к методам и функциям модуля осуществляется с помощью оператора . . Например: 

>>> example.add(4,5.5)
9.5

У 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)
Код выполнен
<module 'my_module' from '.\\my_module.py'>

Зачем нужна встроенная функция 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() без аргументов. 

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©