Урок 35 Модули и import

Как подключать готовый код: import, from...import, псевдонимы, стандартная библиотека

⏱ ~10 мин чтения· 📘 Базовый

Зачем нужны модули?

Модуль в Python — это просто файл с расширением .py, содержащий функции, классы и переменные. Вместо того чтобы писать весь код в одном файле, программисты разбивают программу на модули. Это делает код:

  • Переиспользуемым — один модуль можно подключить в разных программах
  • Структурированным — каждый модуль отвечает за свою часть логики
  • Поддерживаемым — легче находить и исправлять ошибки

Python поставляется с огромной стандартной библиотекой — сотнями готовых модулей для работы с математикой, датами, файлами, сетью и многим другим.

import — подключение модуля целиком

Самый простой способ — импортировать весь модуль. После этого ко всем его функциям нужно обращаться через префикс имя_модуля.:

import math

print(math.sqrt(16))    # 4.0
print(math.pi)          # 3.141592653589793
print(math.factorial(5)) # 120

⚠️ Важно: Правило: import module загружает модуль и создаёт пространство имён. Обращаться к содержимому нужно через точку: module.function().

Это самый безопасный способ: вы всегда видите, из какого модуля взята функция, и избегаете конфликтов имён.

from...import — импорт конкретных имён

Если вам нужна только одна функция или переменная, можно импортировать её напрямую. Тогда не нужно писать префикс модуля:

from math import sqrt, pi

print(sqrt(25))  # 5.0
print(pi)        # 3.141592653589793

Можно импортировать сразу всё содержимое модуля через *:

from math import *

print(sin(0))    # 0.0
print(cos(0))    # 1.0
print(e)         # 2.718281828459045

⚠️ Важно: Осторожно! from module import * засоряет пространство имён. Вы можете случайно переопределить встроенную функцию или переменную. В production-коде так делать не рекомендуется.

as — псевдонимы модулей

Если имя модуля длинное, или вы хотите избежать конфликта имён, используйте as:

import numpy as np
import matplotlib.pyplot as plt
import itertools as it

arr = np.array([1, 2, 3])
print(arr)  # [1 2 3]

for combo in it.product('AB', repeat=2):
    print(combo)

Общепринятые сокращения:

МодульПсевдонимНазначение
numpynpНаучные вычисления
pandaspdАнализ данных
matplotlib.pyplotpltГрафики
itertoolsitКомбинаторика

Обзор стандартной библиотеки

Python поставляется с богатым набором модулей «из коробки». Вот самые полезные:

МодульНазначениеПример использования
mathМатематические функцииsqrt, sin, cos, log, pi, e
randomГенерация случайных чиселrandint, choice, shuffle, random
datetimeДата и времяnow(), timedelta, strftime
osОперационная системаРабота с путями, переменные окружения
sysСистемные функцииargv, exit, path
jsonРабота с JSONloads, dumps, load, dump
reРегулярные выраженияsearch, findall, sub
collectionsДополнительные структуры данныхCounter, defaultdict, deque
pathlibСовременная работа с путямиPath('.').glob('*.py')
timeВремя и задержкиsleep, time_ns

Создание собственного модуля

Любой .py-файл может быть модулем. Создадим файл utils.py:

# utils.py
def greet(name):
    """Приветствие."""
    return f"Привет, {name}!"

def add(a, b):
    """Сложение двух чисел."""
    return a + b

PI = 3.14159

Теперь используем его в другом файле (в той же папке):

# main.py
import utils

print(utils.greet("Мир"))   # Привет, Мир!
print(utils.add(3, 5))      # 8
print(utils.PI)             # 3.14159

⚠️ Важно: при импорте Python выполняет весь код модуля. Чтобы защитить исполняемый код от запуска при импорте, используйте конструкцию if __name__ == '__main__':.

# utils.py с защитой от запуска при импорте
def greet(name):
    return f"Привет, {name}!"

if __name__ == '__main__':
    # Этот код выполнится только при прямом запуске utils.py
    print(greet("Тест"))

Итоги

  • import module — импорт всего модуля (безопасно, ясно)
  • from module import name — импорт конкретной функции/переменной
  • from module import * — импорт всего (не рекомендуется)
  • import module as alias — короткий псевдоним
  • Стандартная библиотека Python содержит сотни готовых модулей
  • Свой модуль — это просто .py-файл в той же папке (или в PYTHONPATH)
  • if __name__ == '__main__': защищает код от выполнения при импорте