Модули. Общие сведения. Создание модуля. Инструкции import, from
Содержание
- 1. Концепция модуля. Структурирование программ с помощью модулей. Атрибуты модуля. Импорт модуля
- 2. Необходимость использования модулей
- 3. Организация приложений на языке Python. Главный файл программы при модульном построении. Второстепенные файлы
- 4. Пример организации программы, состоящей из трех файлов. Рисунок
- 5. Создание модуля средствами Python
- 6. Способы подключения содержимого других модулей
- 7. Доступ ко всему модулю. Инструкция import
- 8. Доступ отдельным компонентам модуля. Инструкция from-import
- 9. Доступ к именам модуля. Инструкция from*
- Связанные темы
Поиск на других ресурсах:
1. Концепция модуля. Структурирование программ с помощью модулей. Атрибуты модуля. Импорт модуля
При написании больших программ или при увеличении размера программы все больше становится потребность в правильном (корректном) разбиении программы на структурно-независимые части. Целью такого структурирования является:
- облегчение написания или развития программы;
- улучшение сопровождения программы;
- уменьшение количества логических ошибок, а следовательно повышение качества разработки программы.
Для обеспечения структурирования в языке Python используются так называемые модули. Модуль – это программная единица, содержащая программный код и данные и предназначенная для организации взаимодействия между структурно-независимыми (структурно-уникальными) частями программы. Каждому модулю соответствует соответствующий файл программы. И, наоборот, каждый файл – это отдельный модуль.
Любой отдельный модуль может быть импортирован (подключен, использован) другим модулем. Также модуль может импортировать (использовать) другой модуль.
Компоненты, реализуемые в модуле, называются атрибутами. Компоненты – это имена переменных связанных с функциями, объектами, классами и т.д.
Также возникает понятие импорт модуля. Импорт модуля – это подключение модуля с помощью специальных инструкций с целью получения доступа к программным средствам (инструментам) этого модуля. После импорта становятся доступными для использования атрибуты модуля.
⇑
2. Необходимость использования модулей
Использование модулей позволяет структурировать программные компоненты в автономные пакеты, которые называются пространствами имен. Как в любом пространстве имен при импорте модуля, все имена являются атрибутами объекта импортируемого модуля. Эти имена описываются в глобальной области видимости импортируемого модуля.
Использование модулей важно по следующим причинам:
- повторное использование кода. Каждый модуль представлен в виде файла. Это позволяет подключать его код в разных (нескольких) клиентских частях программы. В модуле формируется набор имен или, другими словами, набор атрибутов этого модуля;
- распределение пространств имен. Модули являются естественным методом группировки компонент программной системы. С помощью модулей имена изолируются, что позволяет избежать конфликта и путаницы в именах. Имена, используемые в модулях, сгруппированы по некоторым критериям. Объекты и программный код неявно включены в модули;
- совместное использование программных компонентов и данных. Здесь имеется в виду, что один и тот же модуль может использоваться в различных компонентах программной системы. Модуль только один – клиентских программных компонентов несколько.
⇑
3. Организация приложений на языке Python. Главный файл программы при модульном построении. Второстепенные файлы
Как правило, любая современная программа на языке Python построена так, что она использует или состоит из нескольких файлов, еще называемых модулями. Если приложение построено так, что оно содержит несколько модулей, то в этой программе выделяется один главный файл. Этот файл производит запуск всей программы. В этом файле обычно подключаются другие модули всей программы. Главный файл определяет ход выполнения основного потока. В свою очередь, подключенные модули могут использовать для работы средства других модулей.
Если главный файл не будет импортирован в другие файлы, его расширение может быть любым (не обязательно расширение *.py). Важно, чтобы это расширение имело все остальные модули, подключаемые в этом файле. В любом случае, рекомендуется задавать расширение главного файла как *.py, так как это расширение делает назначение данного файла более очевидным и в дальнейшем позволит его импортировать в другие файлы.
Другие или второстепенные файлы программы также могут запускаться на выполнение, если они активны в окне редактора Python. Если в этих файлах содержатся библиотеки функций, то это свойство можно использовать для тестирования этих функций в этом же модуле. После тестирования важно не забыть убрать этот код, поскольку исполнительный код каждого модуля выполняется также при запуске кода главного модуля.
⇑
4. Пример организации программы, состоящей из трех файлов. Рисунок
На рисунке 1 изображен пример организации программы, состоящей из трех файлов:
- main.py – главный файл программы. Из окна редактора этого файла производится запуск программы и подключение второстепенных модулей;
- figures.py, strings.py – второстепенные файлы программы, импортируемые в файл main.py. Файл figures.py содержит функции определения характеристик известных фигур. Файл strings.py содержит функции обработки строк. Эти файлы не запускаются как второстепенные программы.
Рисунок 1. Схема подключения дополнительных модулей и их использование
Как видно из рисунка 1, в модуле figures.py объявляются функции Circumference(), AreaCircle(), VolumeSphere(). Также в модуле strings.py объявляются функции ReverseString() и GetCharCount(). Для доступа к функциям модулей figures.py и strings.py в модуле main.py происходит следующее подключение
import figures, strings
После этого можно обращаться к функциям модулей с помощью синтаксиса
figures.Circumference() figures.AreaCircle() figures.VolumeSphere() strings.ReverseString() strings.GetCharCount()
В свою очередь в модуле figures.py подключаются файлы стандартной библиотеки math
import math
которая содержит математические функции и константы. Модуль figures.py использует константу
math.pi
которая возвращает число π = 3.1415… .
Архитектуру программы, изображенной на рисунке 1, можно представить следующим образом (рисунок 2).
Рисунок 2. Архитектура программы, содержащей 3 файла
⇑
5. Создание модуля средствами Python
В классическом Python модуль создается вызовом стандартной команды создания файла с расширением *.py. Одним из возможных вызовов есть:
File -> New File
или комбинация клавиш Ctrl+N как показано на рисунке 3.
Рисунок 3. Создание нового модуля в Python 3.0
В результате будет создан файл с именем Untitled.py, который в дальнейшем следует сохранить на постоянный носитель (жесткий диск или другой носитель) с одновременным указанием его имени. Это имя будет идентифицировать модуль в других модулях, которые его будут использовать.
В различных системах программирования, в которых поддерживается язык Python, последовательность команд создания модуля такая же или подобная.
⇑
6. Способы подключения содержимого других модулей
Подключение модуля (файла с расширением *.py) производится с помощью следующих инструкций:
- import – здесь подключается весь модуль;
- from – здесь подключается отдельный компонент модуля;
- from* – здесь подключаются все имена заданного модуля.
Ниже более подробно рассматриваются все три способа.
⇑
7. Доступ ко всему модулю. Инструкция import
Чтобы получить доступ к другому модулю полностью, используется инструкция import, вызов которой имеет вид:
import ModuleName
здесь
- ModuleName – имя подключаемого модуля. Это файл с расширением *.py. В этом случае подключается файл ModuleName.py. В файле описывается программный код с данными, которые необходимо использовать в текущем модуле. Имя файла ModuleName.py заменяется на имя переменной ModuleName. Соответствующие компоненты (составляющие) этого файла являются атрибутами переменной ModuleName.
После подключения директивой import обращение к элементу из этого модуля выглядит примерно так
ModuleName.ItemName
здесь
- ItemName – имя элемента из модуля ModuleName. Элементом может быть, например, имя функции, глобальная переменная, имя класса и т.п.
При разбиении программы на модули рекомендуется создавать файлы модулей в домашнем каталоге, установленном по умолчанию. Однако, если нужно использовать файлы модулей из разных каталогов и разных носителей, то для этого нужно вписать нужные каталоги в переменную PYTHONPATH. Настройка переменной PYTHONPATH не является предметом обсуждения в данной теме.
Пример.
Пусть в редакторе Python были созданы два модуля с именами module01.py и module02.py. Эти модули размещаются в одной и той же папке (каталоге).
В модуле module02.py реализована функция определения характеристик известных геометрических фигур:
- Circumference() – длины круга;
- AreaCircle() – площади круга;
- VolumeSphere() – объем шара.
Текст модуля module02.py
# Модуль module02.py # Здесь объявлены функции вычисления характеристик известных фигур. # Подключить модуль math для того, чтобы использовать # константу math.pi и функцию math.pow() import math # Функция вычисления длины окружности def Circumference(r): return 2*math.pi*r # Функция вычисления площади круга def AreaCircle(r): return path.pi*r*r # Функция вычисления объема шара def VolumeSphere(r): return 4.0/3.0 * math.pi*r*r*r
Чтобы использовать эти функции в модуле module01.py, нужно подключить module02.py с помощью инструкции
import module02.py
Демонстрационный текст модуля module01.py следующий
# Модуль module01.py # Подключить модуль module02.py import module02 # Использование функций модуля module02.py # 1. Вычислить длину окружности print("Circumference(2.0) = ", module02.Circumference(2.0)) # 2. Вычислить площадь круга print("AreaCircle(2.0) = ", module02.AreaCircle(2.0)) # 3. Вычислить объем шара print("VolumeSphere(2.0) = ", module02.VolumeSphere(2.0))
После запуска на выполнение модуля module01.py программа отобразит следующий результат
Circumference(2.0) = 12.566370614359172 AreaCircle(2.0) = 12.566370614359172 VolumeSphere(2.0) = 33.510321638291124
⇑
8. Доступ отдельным компонентам модуля. Инструкция from-import
В Python есть возможность получить упрощенный доступ к элементам модуля с помощью инструкции from-import. В общем случае использование данной инструкции следующее:
from ModuleName import ItemName
здесь
- ModuleName – имя модуля, к элементам которого нужно получить доступ;
- ItemName – имя элемента модуля. Элементом модуля могут быть класс, функция, глобальная константа и т.д.
После такого подключения можно обращаться к элементу ItemName без указания имени ModuleName и символа ‘ . ‘ (точка).
Пример.
Чтобы получить сокращенный доступ к функции sin() из библиотеки math, нужно использовать следующую инструкцию
from math import sin
После этого можно вызвать функцию sin() без указания имени модуля math
y = sin(0.5) # получить синус от 0.5 радиан
⇑
9. Доступ к именам модуля. Инструкция from*
Инструкция from имеет специальную форму from*. Эта форма позволяет копировать имена модуля в текущий модуль так, что имя этого модуля не нужно использовать при обращении к его компоненту. Это позволяет сократить ввод с клавиатуры и повысить читабельность программы.
Пример.
В примере импортируются имена из модуля random. Этот модуль содержит функции генерирования случайных чисел. В целях демонстрации вызывается функция randrange(), которая генерирует целое число в заданном интервале. На основе вызова randrange() формируется список из 10 целых чисел.
# Импортировать все компоненты из модуля random from random import * # Сформировать список случайных целых чисел, # каждое из которых лежит в диапазоне [0; 20] # 1. Сформировать пустой список L = [] # 2. Цикл формирования списка L i = 1 while i<=10: # Вызвать функцию из модуля random num = randrange(0, 20) # Добавить число к списку L = L + [num] # Увеличить счетчик i = i+1 # 3. Вывести результат print("L = ", L)
Результат
L = [3, 18, 0, 19, 16, 10, 14, 0, 4, 14]
⇑
Связанные темы
⇑