1.1 Знайомство з модулями
Модуль у Python — це файл з розширенням .py, що містить код. Модулі дозволяють розбивати великий код на менші, керовані частини. Кожен модуль може містити функції, класи та змінні, а також виконувати певний код при його імпортуванні.
Приклад простого модуля
Створимо модуль mymodule.py:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Тепер цей модуль можна імпортувати і використовувати в іншому файлі.
1.2 Імпорт модулів
Python надає кілька способів імпорту модулів. Розглянемо їх по черзі.
Імпорт всього модуля
Загальний вигляд синтаксису цієї операції має вигляд:
import модуль
Цей метод імпортує весь модуль, і ви можете використовувати його функції та змінні, вказуючи ім'я модуля.
import модуль
print(модуль.greet("Alice")) # Вивід: Hello, Alice!
print(модуль.pi) # Вивід: 3.14159
Ми вже раніше робили щось подібне з модулем math, пам'ятаєте?
import math
print(math.ceil(13 / 7)) # округлення вгору
print(math.floor(13 / 7)) # округлення вниз
Імпорт конкретних елементів з модуля
Ви можете імпортувати не все, що є в модулі, а лише деякі його елементи. Загальний вигляд синтаксису цієї операції має вигляд:
from модуль import func, var
Цей метод імпортує лише певні функції, класи або змінні з модуля, що дозволяє використовувати їх без вказівки імені модуля.
from mymodule import greet, pi
print(greet("Bob")) # Вивід: Hello, Bob!
print(pi) # Вивід: 3.14159
Імпорт модуля з псевдонімом
Загальний вигляд синтаксису цієї операції має вигляд:
import модуль as alias
Цей метод дозволяє імпортувати модуль і присвоїти йому інше ім'я, що може бути корисно для скорочення довгих імен модулів або для вирішення конфліктів імен.
import mymodule as mm
print(mm.greet("Charlie")) # Вивід: Hello, Charlie!
print(mm.pi) # Вивід: 3.14159
Імпорт всіх елементів з модуля
Загальний вигляд синтаксису цієї операції має вигляд:
from модуль import *
Цей метод імпортує всі функції, класи і змінні з модуля, що дозволяє використовувати їх без вказівки імені модуля. Проте використання цього методу не рекомендується, оскільки він може викликати конфлікти імен і ускладнити читання коду.
from mymodule import *
print(greet("Dave")) # Вивід: Hello, Dave!
print(pi) # Вивід: 3.14159
1.3 Під капотом процесу імпорту
Порядок пошуку модулів
Коли ви імпортуєте модуль, Python шукає його в певному порядку:
- Поточний каталог: Python спочатку шукає модуль у поточному каталозі, звідки був запущений скрипт.
- Змінна середовища
PYTHONPATH: Якщо модуль не знайдено в поточному каталозі, Python шукає його в каталогах, вказаних у змінній середовищаPYTHONPATH. - Стандартні каталоги: Якщо модуль все ще не знайдено, Python шукає його в стандартних каталогах, таких як директорії, вказані в
sys.path.
Приклад:
import sys
for path in sys.path:
print(path)
Локальний та глобальний імпорт
Імпорт модулів можна виконувати як на глобальному рівні (на початку файлу), так і на локальному рівні (всередині функції або методу).
Глобальний імпорт
Глобальний імпорт виконується на початку файлу і робить імпортований модуль доступним у всьому файлі.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
Локальний імпорт
Локальний імпорт виконується всередині функції або методу і робить імпортований модуль доступним тільки в цій функції або методі.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
Локальний імпорт може бути корисним для зменшення часу завантаження модуля або для запобігання конфліктів імен.
1.4 Динамічний імпорт
Динамічний імпорт дозволяє імпортувати модулі під час виконання програми. Це може бути корисно, коли потрібно імпортувати модулі на основі користувацького вводу або інших динамічних умов.
Загальний вигляд синтаксису цієї операції має вигляд:
module = __import__("модуль")
Давайте для прикладу імпортуємо модуль math таким способом.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # Вивід: 4.0
Робота з подальшим кодом схожа на використання import as, коли модулю math присвоюється псевдонім module.
1.5 Доступ до атрибутів модуля з використанням функції getattr
Функція getattr дозволяє динамічно отримувати атрибути з модуля (або будь-якого об'єкта). Вона може бути корисна у випадках, коли імена атрибутів заздалегідь невідомі або можуть змінюватися під час виконання програми.
Синтаксис функції getattr:
getattr(object, name, default = None)
Де object — це об'єкт, з якого потрібно отримати атрибут, name — рядок, що містить ім'я атрибута, а default — значення, яке повертається в разі, якщо атрибут з заданим ім'ям не існує. Значення за замовчуванням для параметра default — None.
Приклад використання функції getattr:
import math
# Отримуємо атрибут sqrt з модуля math
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # Вивід: 5.0
# Прагнемо отримати неіснуючий атрибут, повертаємо значення за замовчуванням
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # Вивід: default_value
У цьому прикладі ми використовуємо функцію getattr для отримання функції sqrt з модуля math, а потім викликаємо цю функцію для обчислення квадратного кореня числа 25. У випадку, якщо атрибут з заданим ім'ям не існує, повертається значення за замовчуванням default_value.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ