Модули позволяют разбить сложную программу на части, разработку которых можно поручать отдельным программистам.
*Модуль* -- это обычная программа на Python, в которой определяются глобальные переменные, функции и классы.
Имена из импортируемых в нем модулей также становятся частью этого модуля.
При использовании\
``import `` модуль\
доступны все определения через `"модуль" tt"." "имя"`.
Также можно получить доступ к любому имени модуля через\
``from `` модуль `` import `` имя
Однако имена с подчеркиванием в начале не добавляются к именам другого модуля при импорте с помощью\
``from `` модуль `` import *``\
и можно явно указать для этого случая список импортируемых имен с помощью переменной:\
``__all__=('abc','_def')``
Код вне функций исполняется. Можно проверить, вызывается модуль напрямую (``python -m `` модуль) или импортируется с помощью условия:
*Пакет* -- это папка, в которой находятся модули и другие пакеты. Какие имена будут доступны при импорте пакета определяется в файле ``__init__.py``, а в файле ``__main__.py`` пишется код, который выполняется при вызове пакета напрямую (``python -m `` пакет).
### Документирование
Документацией считается строковая константа, которая указывается в первой строке модуля (__init__.py для пакета), в определении класса, в блоке после заголовка функции. Эта информация помещается в специальный атрибут ``__doc__`` соответствующего объекта и может быть просмотрена с помощью функции ``help``:
```run-python
class Polynom:
"""
Полином представляет собой функцию от x,
которая вычисляется по формуле a[n-1]*x**(n-1)+...+a[1]*x+a[0],
где a[i] - коэффициенты полинома
"""
def __init__(self,a):
"В качестве аргумента конструктору можно указать любую последовательность чисел: Polynom([1,-2,1.5])"
self.a=list(a)
def __call__(self,x):
"Для вычисления полинома P в точке x нужно вызвать P(x)"
r=0.0
for ai in reversed(self.a):
r=r*x+ai
return r
def degree(p):
"Вычисляет степень полинома"
return len(p.a)
p=Polynom([1,-2,1.5])
print(p(2))
help(Polynom) # В качестве аргумента можно указать класс или объект этого класса: help(p)
help(degree) # или функцию
```
Модуль pydoc позволяет сформировать html-страницу с документацией по отдельному модулю или запустить локально сайт с документацией по всем доступным модулям:\
``python -m pydoc -b``
### Стандартные модули и пакеты
Название | Состав
--|--
site| импортируется автоматически, если не указан ключ ``-S``\
содержит функции:\
exit(code=None), quit(code=None) -- выход из программы\
help(obj=None) -- справка по указанному классу или классу объекта
string| классы Formatter и Template
re| регулярные выражения, [подробнее](28181-5.html)
textwrap|функции обработки текста
datetime|классы для работы с датами и временем
heapq|функции для работы с кучей, структурой данных, позволяющей быстро получать минимальный элемент
collections|классы deque (универсальная очередь), Counter (разновидность dict для подсчета количества), функция namedtuple для создания классов для кортежей с именованными полями
collections.abc| базовые абстрактные классы для проверки, что объект имеет нужный интерфейс
array| класс array для компактного хранения значений простых типов
bisect|функции для поиска значения в упорядоченном списке и вставке в него
copy|функции копирования объектов
enum|базовые классы Enum, IntEnum, StrEnum, Flag, IntFlag для определения перечислений
graphlib|класс TopologicalSorter для топологической сортировка
math, cmath|математические константы и функции
numbers|базовые абстрактные классы для числовых типов
decimal|класс Decimal и функции для вычислений с фиксированной точкой (так как для float 0.1\*10!=1)
fractions|класс Fraction для рациональных чисел
random|функции для случайных величин\
seed() -- инициализация\
randint(a, b) -- случайное целое число от a до b включительно\
random() -- случайное число с плавающей точкой от 0 до 1\
choice(seq) -- выбор случайного значения из последовательности\
shuffle(x) -- перемешивание списка
statistics|функции для статистических расчётов
itertools|функции для создания и обработки генераторов\
count(start=0, step=1) -- бесконечная последовательность целых чисел, начиная со start\
repeat(x) -- бесконечное повторение x, repeat(x, n) -- повтор x n раз\
cycle(seq) -- бесконечное повторение последовательности\
product(s1,s2,...) -- декартово произведение последовательностей, product(s,repeat=n) -- декартово произведение n последовательностей s\
permutations(seq, n=None) -- все перестановки последовательности или размещения из n элементов последовательности (порядок важен)\
combinations(seq, n) -- все комбинации из n элементов последовательности (порядок не важен)\
combinations_with_replacement(seq, n) -- все комбинации с повторениями из n элементов последовательности (порядок не важен)
functools|преобразование функций\
@cache -- кэширование вычислений функции ниже\
@cached_property -- аналогично для метода\
cmp_to_key(func) -- преобразование функции от двух аргументов, возвращающей -1, 0 или 1 в функцию сравнения для сортировки\
@total_ordering -- добавление остальных функций сравнения к классу по ``__lt__``\
func2=partial(func, /, \*args, \*\*keywords) -- создание функции на основе существующей с частично заданными аргументами\
r=reduce(func, seq, initial=None) -- применить функцию от двух аргументов последовательно ко всем элементам последовательности, пока не получится одно значение
sys|текущие настройки и функции нижнего уровня\
argv -- список аргументов командной строки при запуске, argv[0] -- имя модуля\
maxsize -- максимальный размер\
setrecursionlimit(limit) -- ограничения на вложенность рекурсивных вызовов\
stdin, stdout -- файловые объекты для стандартного ввода и вывода, нужны для\
\* выбора другой кодировки: stdin.reconfigure(encoding='cp1251')\
\* ускорения ввода: stdin.readline() -- ввод строки, включая '\n'
abc|базовый абстрактный класс ABC и декоратор @abstractmethod
time|функции измерения и управления временем\
perf_counter() -- время в секундах\
perf_counter_ns() -- время в ns\
sleep(s) -- ожидание в течение s секунд
logging|функции для журналирования
doctest|тестирование по примерам в строках документации
unittest,\
test.support|модульные тесты
from datetime import date,timedelta
d=date(2025,2,20)
print(d.weekday())
d+=timedelta(10)
print(d.day,d.month)
print(date.today())
```
### Установка дополнительных пакетов
При установке Python в стандартной библиотеке находится минимальное количество пакетов для разных задач. Например, curses для создания интерфейсов консольных приложений, tkinter для GUI, sqlite3 для баз данных, http для разработки веб-клиентов и серверов. Дополнительные пакеты устанавливаются с сайта https://pypi.org с помощью программы pip:\
``pip install `` имя_пакета