Модулі. Загальні відомості. Створення модуля. Інструкції 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]
⇑
Споріднені теми
⇑