![]() |
![]() |
Модули позволяют разбить сложную программу на части, разработку которых можно поручать отдельным программистам. Модуль – это обычная программа на Python, в которой определяются глобальные переменные, функции и классы. Имена из импортируемых в нем модулей также становятся частью этого модуля.
При использованииimport
модуль
доступны все определения через модуль.имя.
Также можно получить доступ к любому имени модуля черезfrom
модуль import
имя
Однако имена с подчеркиванием в начале не добавляются к именам другого модуля при импорте с помощьюfrom
модуль import *
и можно явно указать для этого случая список импортируемых имен с помощью переменной:__all__=('abc','_def')
Код вне функций исполняется. Можно проверить, вызывается модуль напрямую (python -m
модуль) или импортируется с помощью условия:
if __name__ == '__main__':
# вызывается
else:
# импортируется
Пакет – это папка, в которой находятся модули и другие пакеты. Какие имена будут доступны при импорте пакета определяется в файле __init__.py
, а в файле __main__.py
пишется код, который выполняется при вызове пакета напрямую (python -m
пакет).
Документацией считается строковая константа, которая указывается в первой строке модуля (init.py для пакета), в определении класса, в блоке после заголовка функции. Эта информация помещается в специальный атрибут __doc__
соответствующего объекта и может быть просмотрена с помощью функции help
:
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 | регулярные выражения, подробнее |
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 |
модульные тесты |
import collections
Point=collections.namedtuple('Point', ['x', 'y'])
p=Point(1,2)
print(p.x, p.y)
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
имя_пакета
Например,pip install pcio