Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Работа с модулями в Python

Работа с модулями в Python

Модулем в языке Python называется любой файл с программой. Каждый модуль может импортировать другой модуль, получая, таким образом, доступ к идентификаторам внутри импортированного модуля. Следует заметить, что импортируемый модуль может содержать программу не только на языке Python. Например, можно импортировать скомпилированный модуль, написанный на языке C.

Все программы, которые мы запускали ранее, были расположены в модуле с названием "__main__". Получить имя модуля позволяет предопределенный атрибут __name__. Атрибут __name__ для запускаемого модуля содержит значение "__main__", а для импортируемого модуля - его имя. Выведем название модуля:

print __name__    # Выведет: __main__

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

Проверка способа запуска модуля

if __name__ == "__main__":
    print "Это главная программа"
else:
    print "Импортированный модуль"

Инструкция import

Импортировать модуль позволяет инструкция import. Мы уже не раз использовали эту инструкцию для подключения встроенных модулей. Например, подключали модуль time для получения текущей даты с помощью функции strftime():

import time            # Импортируем модуль
print time.strftime("%d.%m.%Y")    # Выводим текущую дату

После ключевого слова import указывается название модуля. Обратите внимание на то, что название не должно содержать и пути к файлу. При именовании модулей необходимо учитывать, что операция импорта создает одноименный идентификатор. Это означает, что название модуля должно полностью соответствовать правилам именований переменных. Можно создать модуль с именем, начинающимся с цифры, но подключить такой модуль будет нельзя. Кроме того, следует избегать совпадения с ключевыми словами, встроенными идентификаторами и названиями моделей, входящих в стандартную библиотеку.

За один раз можно импортировать сразу несколько модулей, перечислив их через запятую. В качестве примера подключим модули time и math.

Подключение нескольких модулей сразу

import time, math        # Импортируем несколько модулей сразу
print time.strftime("%d.%m.%Y")    # Текущая дата
print math.pi            # Число pi

После импортирования модуля его название становится идентификатором, через который можно получить доступ к атрибутам, определенным внутри модуля. Доступ к атрибутам модуля осуществляется с помощью точечной нотации. Например, обратится к константе pi, расположенной внутри модуля math, можно так:

math.pi

Функция getattr() позволяет получить значение атрибута модуля по его названию, заданному в виде строки. С помощью этой функции можно сформировать название атрибута динамически во время выполнения программы.

Если указанный атрибут не найдет, возбуждается исключение AttributeError. Чтобы избежать вывода сообщения об ошибке, можно в третьем параметре указать значение, которое будет возвращаться, если атрибут не существует. Например использовать функции приведен в коде ниже:

import math
print gatattr(math, "pi")    # Число pi
print getattr(math, "x", 50)    # Число 50, т.к. x не существует

Использование псевдонимов

Если название модуля является слишком длинной и его неудобно указывать каждый раз для доступа к идентификаторам внутри модуля, то можно создать псевдоним. Псевдоним задается после ключевого слова as. Создадим псевдоним для модуля math:

import math as m    # Создание псевдонима
print m.pi        # Число pi

Теперь доступ к атрибутам модуля math может осуществляться только с помощью идентификатора m. Идентификатор math в этом случае использовать уже нельзя. Все идентификаторы внутри импортированного модуля доступны только через идентификатор, указанный в инструкции import. Это означает, что любая глобальная переменная на самом деле является глобальной переменной модуля.

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