Python. Модулі. Загальні відомості. Створення модуля. Інструкції import, from

Модулі. Загальні відомості. Створення модуля. Інструкції import, from

1. Поняття модуля. Структурування програм з допомогою модулів. Атрибути модуля. Імпорт модуля

При написанні великих програм або при збільшенні розміру програми все більше стає потреба у правильному (коректному) розбитті програми на структурно-незалежні частини. Метою такого структурування є:

  • полегшення написання чи розвитку програми;
  • покращення супроводу програми;
  • зменшення кількості логічних помилок, а, отже, підвищення якості розробки програми.

Для забезпечення структурування у мові Python використовуються так звані модулі. Модуль – це програмна одиниця, яка містить програмний код та дані і призначена для організації взаємодії між структурно-незалежними (структурно-унікальними) частинами програми. Кожному модулю відповідає відповідний файл програми. І, навпаки, кожен файл – це окремий модуль.

Будь-який окремий модуль може бути імпортований (підключений, використаний) іншим модулем. Також модуль може імпортувати (використовувати) інший модуль.

Компоненти, що реалізовані в модулі, називаються атрибутами. Компоненти – це імена змінних що зв’язані з функціями, об’єктами, класами тощо.

Також виникає поняття імпорт модуля. Імпорт модуля – це підключення модуля з допомогою спеціальних інструкцій з метою отримання доступу до програмних засобів (інструментів) цього модуля. Після імпортування стають доступними для використання атрибути модуля.

 

2. Необхідність використання модулів

Використання модулів дозволяє структурувати програмні компоненти в автономні пакети, які ще називаються просторами імен. Як в будь-якому просторі імен при імпортуванні модуля всі імена є атрибутами об’єкту імпортованого модуля. Ці імена описуються в глобальній області видимості імпортованого модуля.

Використання модулів є важливим з наступних причин:

  • повторне використання коду. Кожний модуль представлений у вигляді файлу. Це дає змогу підключати його код в різних (декількох) клієнтських частинах програми. У модулі формується набір імен, або, іншими словами, набір атрибутів цього модуля;
  • розподіл просторів імен. Модулі є природнім способом групування компонент програмної системи. З допомогою модулів імена ізолюються, що дозволяє уникнути конфлікту та плутанини в іменах. Імена, що використовуються в модулях є згруповані за деяким критерієм. Об’єкти та програмний код є неявно включеними в модулі;
  • сумісне використання програмних компонент та даних. Тут мається на увазі, що один і той самий модуль може використовуватись в різних компонентах програмної системи. Модуль тільки один – клієнтських програмних компонент декілька.

 

3. Організація програм на мові Python. Головний файл програми при модульній побудові. Другорядні файли

Як правило, будь-яка сучасна програма на мові Python побудована так, що вона використовує або складається з декількох файлів, які ще називають модулями. Якщо програма побудована так, що вона містить декілька модулів, то в цій програмі виділяється один головний файл. Цей файл здійснює запуск усієї програми. У цьому файлі, як правило, підключаються інші модулі всієї програми. Головний файл визначає хід виконання основного потоку. У свою чергу, підключені модулі можуть використовувати для своєї роботи засоби інших модулів.

Якщо головний файл не буде імпортований в інші файли, то його розширення може бути будь-яким (не обов’яково розширення *.py). Важливо, щоб це розширення мали всі інші модулі, які підключаються у цьому файлі. У будь-якому випадку, рекомендовано розширення головного файлу задавати як *.py, оскільки це розширення робить призначення даного файлу більш очевидним та в подальшому дозволить його імпортувати в інші файли.

Інші або другорядні файли програми також можуть запускатись на виконання якщо вони активні у вікні редактора Python. Якщо у цих файлах містяться бібліотеки функцій, то цю властивість можна використати для тестування роботи цих функцій у цьому ж модулі. Після завершення тестування важливо не забути прибрати цей код, оскільки виконавчий код кожного модуля виконується також при запуску коду головного модуля.

 

4. Приклад організації програми, яка складається з трьох файлів. Рисунок

На рисунку 1 зображено приклад організації програми, яка складаєтсья з трьох файлів:

  • main.py – головний файл програми. З вікна редактора цього файлу відбувається запуск програми та підключення другорядних модулів;
  • figures.py, strings.py – другорядні файли програми, які імпортуються у файл main.py. У файлі figures.py містяться функції визначення характеристик відомих фігур. У файлі strings.py містяться функції обробки рядків. Ці файли не запускаються як другорядні програми.

 

Python. Модулі. Схема підключення додаткових модулів та їх використання

Рисунок 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).

Python. Модулі. Архітектура програми, що містить 3 файли

Рисунок 2. Архітектура програми, що містить 3 файли

 

5. Створення модуля засобами Python

У класичному Python модуль створюється викликом стандартної команди створення файлу з розширенням *.py. Одним з можливих викликів є:

File -> New File

або комбінація клавіш Ctrl+N як показано на рисунку 3.

Python. Команда створення нового модуля в Python 3.0

Рисунок 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]