Python: полный мануал с примерами и справочником функций
Полный практический мануал Python: от установки и синтаксиса до файлов, сети, тестов и проектов. 25 глав, справочник функций и методов, упражнения с решениями и 195 проверенных примеров.

Python удобно изучать на задачах: посчитать расходы, разобрать текст, прочитать файл, собрать отчёт. В этом руководстве пройдём путь от установки и первых выражений до функций, классов, сети, тестов и самостоятельных проектов.
Выберите одну из 25 глав или найдите нужную функцию через поиск. В справочнике собраны все 73 позиции официальной таблицы встроенных функций и типов Python 3.15, а также 161 метод и 12 свойств строк, коллекций и путей. Для каждой позиции есть назначение, важный нюанс и ссылка на первичную документацию.
Код можно копировать и скачивать. 195 самостоятельных примеров проверены запуском на Python 3.15.0; у упражнений есть решения и ожидаемый результат. Новые возможности языка отмечены в тексте, а интерактивные фрагменты и команды установки объяснены отдельно.
Если начинаете с нуля, открывайте главы по порядку. Если решаете конкретную задачу, ищите по-русски или по имени Python: open, str.split, Path.read_text.
Все главы руководства 25
Глава 9 · начальный
Встроенные функции: полный справочник и выбор по задаче
Найдите нужную встроенную функцию, прочитайте сигнатуру и проверьте её на обычном и пограничном вводе.
Как найти функцию и понять её запись
Нужно отсортировать записи, посчитать элементы или открыть файл? Сначала ищите готовую операцию в стандартном наборе. Встроенные функции доступны без собственного импорта: len(items), print(message), sorted(items). Рядом находятся вызываемые типы: list(), dict(), str(). Для посетителя это один справочник, хотя функция и создание объекта решают разные задачи.
В мануале представлен полный каталог из 73 позиций официальной таблицы Python 3.15: включая frozendict, sentinel и специальную __import__. Исключения и константы, например ValueError и None, изучаются отдельно. Наличие всех позиций этой таблицы не означает каталог всех функций сторонних библиотек.
Начните с имени или задачи, затем прочитайте возвращаемое значение и ограничения. В сигнатуре косая черта отделяет позиционные параметры, одиночная звёздочка начинает именованные. Значение по умолчанию позволяет опустить аргумент. Такие обозначения объясняют, почему две внешне похожие записи вызова могут вести себя по-разному.
Какие группы пригодятся в обычной программе
Для чисел используйте abs, round, min, max, sum, pow и divmod. Но сначала определите смысл расчёта. Денежная сумма с точными десятичными правилами может требовать Decimal из стандартной библиотеки; простой вызов round не меняет способ хранения исходного float.
Для обхода данных нужны enumerate, zip, iter, next и range. Для проверки условий — all и any. Для порядка — sorted и reversed. Многие из этих операций возвращают объект для последующего обхода, поэтому добавляйте list(...) только когда действительно нужны сохранённые элементы.
Для преобразования есть int, float, str, bytes и контейнеры. Преобразование может завершиться исключением; функция не угадывает за вас формат чужого текста. Для проверки объекта применяются isinstance, issubclass, callable и hasattr. Их результат отвечает конкретному вопросу, а не подтверждает всю пригодность объекта.
Сортировать, изменить список или пройти наоборот
sorted создаёт новый список из переданного итерируемого объекта. Метод list.sort переставляет существующий список и возвращает None. reversed позволяет идти в обратном порядке, сохраняя исходные значения. Выбор определяется тем, нужно ли сохранить прежний порядок и нужен ли отдельный результат.
Обе сортировки поддерживают key. Для списка товаров ключом может быть цена, для текстов — подготовленная строка. Сортировка стабильна: элементы с одинаковым ключом сохраняют взаимный порядок. Это полезно, когда ранее выполненная сортировка или последовательность поступления имеют значение. Не сравнивайте объекты разных несопоставимых типов, рассчитывая на случайный универсальный порядок.
values = [3, 1, 2]
ordered = sorted(values)
print(values)
print(ordered)
print(list(reversed(values)))
result = values.sort()
print(values)
print(result is None)
[3, 1, 2] [1, 2, 3] [2, 1, 3] [1, 2, 3] True
Проверять длину и пустые данные
По умолчанию zip заканчивается вместе с самым коротким источником. Для связанных колонок это может незаметно потерять часть записей. Параметр strict=True, доступный с Python 3.10, превращает несоответствие длин в ошибку при обходе. Если одна колонка намеренно короче, такая проверка не подходит: сначала сформулируйте правило обработки отсутствующего значения.
all([]) даёт True, а any([]) — False. Это следствие смысла операций: среди пустого набора нет ложного элемента и нет истинного. Если бизнес-правило требует хотя бы одну запись, отдельно проверьте непустоту. У min и max для пустого итерируемого источника можно задать default; значение должно иметь понятный смысл для дальнейшего расчёта.
names = ["А", "Б"]
amounts = [10]
print(list(zip(names, amounts)))
try:
print(list(zip(names, amounts, strict=True)))
except ValueError:
print("Длины различаются")
print(all([]), any([]))
print(max([], default=None))
[('А', 10)]
Длины различаются
True False
None
Проверка типа и узнаваемое отсутствующее значение
isinstance(True, int) возвращает True: bool является подтипом int. Для поля, где разрешено только обычное целое число, это может быть слишком широкая проверка. В то же время сравнение type(value) is int намеренно исключит и пользовательские подклассы. Выбирайте проверку согласно контракту, а не привычной короткой записи.
Новый тип sentinel в Python 3.15 помогает отличить отсутствующий аргумент от явно переданного None. Сравнивайте конкретный маркер по идентичности. frozendict создаёт словарь без операций изменения; он не является подклассом dict. Его вложенные значения сохраняют собственные свойства: наличие внутри списка не делает этот список неизменяемым и мешает хешируемости всего объекта.
MISSING = sentinel("MISSING")
def describe(value=MISSING):
if value is MISSING:
return "Аргумент не передан"
if value is None:
return "Передан None"
return "Передано значение"
settings = frozendict(mode="demo", limit=10)
print(describe())
print(describe(None))
print(settings["limit"])
print(settings == frozendict(limit=10, mode="demo"))
try:
settings["limit"] = 20
except TypeError:
print("Словарь не изменяется")
Аргумент не передан Передан None 10 True Словарь не изменяется
Результат проверки и пределы возможностей
callable сообщает, что объект выглядит вызываемым; конкретный вызов всё равно может завершиться ошибкой аргументов или внутреннего расчёта. hasattr проверяет доступ к атрибуту и может вызвать логику свойства. Для подробного исследования пригодятся help, dir, vars и модуль inspect. Полученный список имён не заменяет описание публичного API.
eval, exec и compile работают с кодом. Не используйте их как удобное преобразование пользовательской строки в число или список. Для известных форматов существуют int, JSON и другие целевые парсеры. open рассматривайте вместе с контекстным менеджером и кодировкой, а input — вместе с обработкой полученной строки.
Практический маршрут справочника короткий: выбрать операцию, определить форму данных, проверить результат на пустом и неправильном вводе, затем встроить в функцию своей программы. Если знакомая запись не работает, сверяйте минимальную версию и сигнатуру. Не заменяйте такую проверку установкой похожего пакета: встроенная функция уже принадлежит интерпретатору.
Попробуйте самостоятельно. Для двух колонок из CSV нужно сохранить каждую пару и остановить обработку, если длины различаются. Какую запись выбрать?
Посмотреть решение
Используйте zip(first, second, strict=True) и обработайте ValueError вокруг фактического обхода. Если требуется сохранить результат, создайте list внутри этого блока. Затем отдельно решите, допустимы ли обе пустые колонки: all не проверяет наличие данных.
Все 73 встроенные функции и вызываемые типы
Откройте нужное имя: назначение, нюанс, пример использования и точная ссылка на документацию. Интерактивный breakpoint обозначен отдельно.
absФункция · Числа
Возвращает модуль числа.
Нюанс. Для комплексного числа результатом будет его величина, а не отдельно изменённые части.
abs(number, /) — упрощённо; остальные варианты в документации
Получить расстояние от нуля или величину отклонения независимо от его знака. Для комплексного числа результатом будет его модуль.
expected = 18
actual = 13
print(abs(actual - expected))
Ожидаемый вывод:
5Официальная документация: abs
aiterФункция · Асинхронность
Получает асинхронный итератор объекта.
Нюанс. Варианта с вызываемым объектом и стоп-значением, как у iter(), здесь нет.
aiter(async_iterable, /) — упрощённо; остальные варианты в документации
Начать ручной обход асинхронного источника. Полученный итератор используют с anext/await; обычный iter для него не подходит.
import asyncio
async def source():
yield 7
async def main():
iterator = aiter(source())
print(iterator is aiter(iterator))
print(await anext(iterator))
await iterator.aclose()
asyncio.run(main())
Ожидаемый вывод:
True 7Официальная документация: aiter
allФункция · Проверки
Проверяет, истинны ли все элементы перебираемого объекта.
Нюанс. Для пустого объекта возвращает True.
all(iterable, /) — упрощённо; остальные варианты в документации
Проверить, что все условия выполнены. Для пустого источника результат True; если нужны ещё и данные, отдельно проверяйте непустоту.
quantities = [2, 0, 4]
print(all(value >= 0 for value in quantities))
print(all([]))
Ожидаемый вывод:
True TrueОфициальная документация: all
anextФункция · Асинхронность
Получает ожидание следующего элемента асинхронного итератора.
Нюанс. Результат нужно ожидать через await; без default конец итерации вызывает StopAsyncIteration.
anext(async_iterator[, default], /) — упрощённо; остальные варианты в документации
Получить один элемент асинхронного итератора через await. Значение default позволяет обработать завершение без StopAsyncIteration.
import asyncio
async def source():
yield 'готово'
async def main():
iterator = aiter(source())
print(await anext(iterator))
print(await anext(iterator, 'конец'))
asyncio.run(main())
Ожидаемый вывод:
готово конецОфициальная документация: anext
anyФункция · Проверки
Проверяет, есть ли хотя бы один истинный элемент.
Нюанс. Для пустого объекта возвращает False.
any(iterable, /) — упрощённо; остальные варианты в документации
Узнать, найдена ли хотя бы одна подходящая запись. Пустой источник даёт False; проверка останавливается на первом истинном элементе.
statuses = ['new', 'error', 'done']
print(any(status == 'error' for status in statuses))
print(any([]))
Ожидаемый вывод:
True FalseОфициальная документация: any
asciiФункция · Представление и форматирование
Создаёт представление объекта с экранированными не-ASCII символами.
Нюанс. Это представление для просмотра, а не преобразование текстового файла в ASCII.
ascii(object, /) — упрощённо; остальные варианты в документации
Показать отладочное представление с экранированными не-ASCII символами. Это представление, а не кодировка исходного файла.
word = 'ёж'
escaped = ascii(word)
print(escaped)
Ожидаемый вывод:
'\u0451\u0436'Официальная документация: ascii
binФункция · Числа
Записывает целое число двоичной строкой.
Нюанс. В результат входит префикс 0b; для другого оформления используйте format().
bin(integer, /) — упрощённо; остальные варианты в документации
Показать целое число в двоичном виде, например при разборе битовых флагов. Для заданной ширины и без префикса используйте форматирование.
flags = 10
print(bin(flags))
print(format(flags, '08b'))
Ожидаемый вывод:
0b1010 00001010Официальная документация: bin
boolТип / конструктор · Типы и преобразования
Преобразует объект в True или False по правилам истинности.
Нюанс. bool является подклассом int, поэтому проверки на int включают булевы значения.
bool(object=False, /) — упрощённо; остальные варианты в документации
Явно получить True/False по правилам истинности. Непустая строка «False» тоже истинна: это не разбор текстовой настройки.
values = [[], [0], '', 'False']
for value in values:
print(bool(value))
Ожидаемый вывод:
False True False TrueОфициальная документация: bool
breakpointФункция · Отладка
Передаёт управление отладчику в месте вызова.
Нюанс. Поведение зависит от sys.breakpointhook и переменной PYTHONBREAKPOINT.
breakpoint(*args, **kwargs) — упрощённо; остальные варианты в документации
Интерактивно остановиться и исследовать значения в отладчике. Пример требует человека: он исключён из автоматической проверки, приглашения отладчика не объявлены стабильным stdout.
Интерактивный фрагмент. Требует участия человека; автоматически не запускался. В архиве он отделён от проверенных run-примеров.
subtotal = 120 + 80
discount = 20
breakpoint()
print(subtotal - discount)
Официальная документация: breakpointbytearrayТип / конструктор · Байты и буферы
Создаёт изменяемую последовательность байтов.
Нюанс. Целый аргумент задаёт длину массива нулевых байтов, а не код одного символа.
bytearray(source=...); bytearray(text, encoding, errors="strict") — упрощённо; остальные варианты в документации
Создать изменяемый буфер байтов для обработки двоичных данных. Значения одного элемента должны находиться в диапазоне 0–255.
buffer = bytearray(b'cat')
buffer[0] = ord('b')
print(buffer.decode('ascii'))
print(bytes(buffer))
Ожидаемый вывод:
bat b'bat'Официальная документация: bytearray
bytesТип / конструктор · Байты и буферы
Создаёт неизменяемую последовательность байтов.
Нюанс. Для преобразования строки необходимо указать кодировку.
bytes(source=...); bytes(text, encoding, errors="strict") — упрощённо; остальные варианты в документации
Получить неизменяемые байты или закодировать текст с явной кодировкой. bytes(3) создаёт три нулевых байта, а не текст «3».
text = 'Ё'
data = bytes(text, 'utf-8')
print(list(data))
print(data.decode('utf-8'))
Ожидаемый вывод:
[208, 129] ЁОфициальная документация: bytes
callableФункция · Проверки
Проверяет, допускает ли объект вызов.
Нюанс. True не гарантирует, что конкретный вызов с выбранными аргументами завершится успешно.
callable(object, /) — упрощённо; остальные варианты в документации
Проверить, можно ли вызвать объект как функцию. Положительный результат не гарантирует, что конкретные аргументы подходят этому вызову.
handler = lambda value: value * 2
print(callable(handler))
print(callable(42))
print(handler(5))
Ожидаемый вывод:
True False 10Официальная документация: callable
chrФункция · Текст и Unicode
Возвращает символ Unicode по его числовому коду.
Нюанс. Допустимы коды от 0 до 0x10FFFF; за пределами возникает ValueError.
chr(codepoint, /) — упрощённо; остальные варианты в документации
Преобразовать числовой код Unicode в символ, например при разборе собственного текстового формата. Это операция над кодовой точкой, не над произвольным байтом UTF-8.
codepoint = 0x0410
letter = chr(codepoint)
print(letter)
print(ord(letter) == codepoint)
Ожидаемый вывод:
А TrueОфициальная документация: chr
classmethodДекоратор / тип · Классы и атрибуты
Создаёт метод, получающий класс первым аргументом.
Нюанс. При вызове через подкласс первым аргументом будет этот подкласс.
classmethod(function); обычно @classmethod — упрощённо; остальные варианты в документации
Создать альтернативный конструктор, который получает класс как cls и сохраняет нужный класс при наследовании.
class Quantity:
def __init__(self, value):
self.value = value
@classmethod
def from_text(cls, text):
return cls(int(text))
class SpecialQuantity(Quantity):
pass
value = SpecialQuantity.from_text('12')
print(type(value).__name__)
print(value.value)
Ожидаемый вывод:
SpecialQuantity 12Официальная документация: classmethod
compileФункция · Выполнение кода
Компилирует исходный текст в объект кода или AST.
Нюанс. Режимы exec, eval и single предназначены для разных форм исходного текста.
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) — упрощённо; остальные варианты в документации
Подготовить собственный литерал к повторному выполнению или проверить его синтаксис. compile/eval/exec не образуют песочницу для чужого кода.
code = compile('3 * 7', '<owned-demo>', 'eval')
print(type(code).__name__)
print(eval(code))
Ожидаемый вывод:
code 21Официальная документация: compile
complexТип / конструктор · Типы и преобразования
Создаёт комплексное число из числа, строки или пары частей.
Нюанс. Передача комплексных значений в отдельные real и imag устарела с Python 3.14.
complex(real=0, imag=0); также complex(text) — упрощённо; остальные варианты в документации
Представить число с действительной и мнимой частью для соответствующего расчёта. Строковый и числовой способы создания имеют разные правила аргументов.
value = complex(2, 3)
print(value)
print(value * value)
print(value.real, value.imag)
Ожидаемый вывод:
(2+3j) (-5+12j) 2.0 3.0Официальная документация: complex
delattrФункция · Классы и атрибуты
Удаляет атрибут объекта по строковому имени.
Нюанс. Объект должен разрешать удаление; операция эквивалентна del для этого атрибута.
delattr(object, name, /) — упрощённо; остальные варианты в документации
Удалить атрибут по известному строковому имени. Используйте только допустимые имена своего объекта; дескриптор может задавать собственные правила удаления.
class Draft:
pass
item = Draft()
item.note = 'черновик'
delattr(item, 'note')
print(hasattr(item, 'note'))
Ожидаемый вывод:
FalseОфициальная документация: delattr
dictТип / конструктор · Контейнеры
Создаёт словарь соответствий между ключами и значениями.
Нюанс. Ключи должны быть хешируемыми; порядок добавления сохраняется.
dict(); dict(mapping); dict(pairs); dict(**kwargs) — упрощённо; остальные варианты в документации
Построить соответствие ключей значениям. Ключи должны быть хешируемыми; повторное имя заменяет значение, а порядок вставки сохраняется.
pairs = [('a', 1), ('b', 3), ('a', 2)]
record = dict(pairs)
print(sorted(record.items()))
print(record['a'])
Ожидаемый вывод:
[('a', 2), ('b', 3)]
2
Официальная документация: dictdirФункция · Отладка
Выводит имена в текущей области или доступные атрибуты объекта.
Нюанс. Список удобен для исследования, но не обязан быть исчерпывающим.
dir(); dir(object, /) — упрощённо; остальные варианты в документации
Узнать доступные имена при исследовании объекта. Результат зависит от объекта и не заменяет полный контракт API или проверку наличия конкретного атрибута.
names = dir([])
interesting = [name for name in names if name in {'append', 'clear'}]
print(sorted(interesting))
Ожидаемый вывод:
['append', 'clear']Официальная документация: dir
divmodФункция · Числа
Возвращает пару из частного с делением вниз и остатка.
Нюанс. Для целых остаток следует знаку делителя, что важно при отрицательных числах.
divmod(a, b, /) — упрощённо; остальные варианты в документации
Одновременно получить целое частное с делением вниз и остаток, например разбить целое число секунд на минуты и остаток секунд.
seconds = 125
minutes, remainder = divmod(seconds, 60)
print(minutes, remainder)
Ожидаемый вывод:
2 5Официальная документация: divmod
enumerateТип / конструктор · Итерация
Перебирает элементы вместе со счётчиком.
Нюанс. Счётчик по умолчанию начинается с нуля и меняется параметром start.
enumerate(iterable, start=0) — упрощённо; остальные варианты в документации
Перебирать строки или записи вместе с номером, не управляя отдельным счётчиком вручную. start задаёт первый номер.
names = ['Кабель', 'Клемма']
for number, name in enumerate(names, start=1):
print(number, name)
Ожидаемый вывод:
1 Кабель 2 КлеммаОфициальная документация: enumerate
evalФункция · Выполнение кода
Вычисляет выражение Python и возвращает его результат.
Нюанс. Непроверенный пользовательский текст способен выполнить произвольный код.
eval(source, /, globals=None, locals=None) — упрощённо; остальные варианты в документации
Вычислить известное выражение Python. В примере используется только наш литерал; удаление builtins из globals не делает eval безопасной песочницей для внешних выражений.
expression = 'price * quantity'
namespace = {'price': 12, 'quantity': 3}
print(eval(expression, {'__builtins__': {}}, namespace))
Ожидаемый вывод:
36Официальная документация: eval
execФункция · Выполнение кода
Выполняет набор инструкций Python из текста или объекта кода.
Нюанс. Непроверенный пользовательский текст способен выполнить произвольный код.
exec(source, /, globals=None, locals=None, *, closure=None) — упрощённо; остальные варианты в документации
Выполнить собственные инструкции в явно выбранном пространстве имён. Не применять к чужому тексту как к формату данных: это исполнение кода, а не безопасный разбор.
namespace = {'value': 4}
exec('result = value * 2', namespace)
print(namespace['result'])
Ожидаемый вывод:
8Официальная документация: exec
filterТип / конструктор · Итерация
Лениво оставляет элементы, для которых условие истинно.
Нюанс. При function=None отбрасываются все ложные элементы, включая нули и пустые строки.
filter(function, iterable, /) — упрощённо; остальные варианты в документации
Лениво оставить элементы, прошедшие проверку. Результат — одноразовый итератор; для повторного использования материализуйте нужный небольшой список.
source = [-2, 0, 3, 5]
selected = filter(lambda value: value > 0, source)
print(list(selected))
print(list(selected))
Ожидаемый вывод:
[3, 5] []Официальная документация: filter
floatТип / конструктор · Типы и преобразования
Преобразует число или числовую строку в число с плавающей точкой.
Нюанс. Строка должна соответствовать синтаксису Python; десятичная запятая не принимается.
float(number=0, /); также float(text, /) — упрощённо; остальные варианты в документации
Прочитать число с плавающей точкой из десятичной строки. Для точных денежных правил выбирайте подходящее представление; float не гарантирует десятичную точность.
value = float('12.5')
print(value)
print(value.is_integer())
Ожидаемый вывод:
12.5 FalseОфициальная документация: float
formatФункция · Представление и форматирование
Форматирует одно значение по указанной спецификации.
Нюанс. Спецификация зависит от типа объекта и его метода __format__().
format(value, format_spec="", /) — упрощённо; остальные варианты в документации
Получить форматированную строку одного значения: сумму с двумя знаками, номер нужной ширины или иной формат, поддержанный типом.
amount = 12.5
print(format(amount, '.2f'))
print(format(42, '04d'))
Ожидаемый вывод:
12.50 0042Официальная документация: format
frozendictТип / конструктор · Контейнеры
Создаёт неизменяемый словарь с интерфейсом чтения dict.
Нюанс. Появился в 3.15; хешируется только тогда, когда хешируются все ключи и значения.
frozendict(); frozendict(mapping_or_pairs); frozendict(**kwargs) — упрощённо; остальные варианты в документации
Начиная с Python 3.15 создать неизменяемое отображение для настроек или передаваемого снимка. Оно не замораживает автоматически изменяемые вложенные значения.
settings = frozendict({'limit': 3, 'mode': 'demo'})
print(sorted(settings.items()))
try:
settings['limit'] = 4
except TypeError:
print('Изменение запрещено')
Ожидаемый вывод:
[('limit', 3), ('mode', 'demo')]
Изменение запрещено
Официальная документация: frozendictfrozensetТип / конструктор · Контейнеры
Создаёт неизменяемое множество уникальных элементов.
Нюанс. Элементы должны быть хешируемыми; само множество также можно использовать как ключ.
frozenset(iterable=(), /) — упрощённо; остальные варианты в документации
Сохранить неизменяемое множество уникальных хешируемых элементов, в том числе как ключ словаря или элемент другого множества. Порядок элементов не задан.
selected = frozenset([3, 1, 3])
print(sorted(selected))
print(len({selected}))
Ожидаемый вывод:
[1, 3] 1Официальная документация: frozenset
getattrФункция · Классы и атрибуты
Читает атрибут объекта по строковому имени.
Нюанс. Если атрибут отсутствует, возвращает default или вызывает AttributeError.
getattr(object, name[, default], /) — упрощённо; остальные варианты в документации
Прочитать известный атрибут по имени, например при выборе разрешённого параметра. Значение default используется, когда атрибут отсутствует; property при чтении может выполнять код.
class Settings:
limit = 10
settings = Settings()
print(getattr(settings, 'limit'))
print(getattr(settings, 'missing', 0))
Ожидаемый вывод:
10 0Официальная документация: getattr
globalsФункция · Области видимости
Возвращает словарь глобальных имён текущего модуля.
Нюанс. Внутри функции это пространство модуля определения функции, а не места вызова.
globals() — упрощённо; остальные варианты в документации
Получить отображение глобальных имён текущего модуля при диагностике собственного кода. Не выводите весь словарь: в нём могут быть данные, не предназначенные для публикации.
DEMO_COUNT = 7
namespace = globals()
print(namespace['DEMO_COUNT'])
print('DEMO_COUNT' in namespace)
Ожидаемый вывод:
7 TrueОфициальная документация: globals
hasattrФункция · Классы и атрибуты
Проверяет доступность атрибута по имени.
Нюанс. Проверка вызывает getattr(), поэтому может запустить property или другой дескриптор.
hasattr(object, name, /) — упрощённо; остальные варианты в документации
Проверить доступность конкретного атрибута. Проверка выполняет обращение к нему: дескриптор может запуститься, а исключение кроме AttributeError может выйти наружу.
class Item:
name = 'demo'
item = Item()
print(hasattr(item, 'name'))
print(hasattr(item, 'price'))
Ожидаемый вывод:
True FalseОфициальная документация: hasattr
hashФункция · Проверки
Возвращает хеш хешируемого объекта.
Нюанс. Разные объекты могут иметь один хеш; совпадение хешей не доказывает равенство.
hash(object, /) — упрощённо; остальные варианты в документации
Получить хеш хешируемого ключа для понимания работы dict/set. Хеш не является уникальным идентификатором; значения для ряда типов могут меняться между процессами.
key = (7, 'web')
value = hash(key)
print(isinstance(value, int))
print(value == hash((7, 'web')))
Ожидаемый вывод:
True TrueОфициальная документация: hash
helpФункция · Отладка
Показывает справку по объекту или запускает интерактивную справочную систему.
Нюанс. Без аргумента запускает диалог в консоли, а не возвращает готовый текст документации.
help(); help(object) — упрощённо; остальные варианты в документации
Посмотреть справку по функции или типу. Без аргумента включается интерактивная система; здесь справка по len реально вызывается и перехватывается для устойчивой проверки.
import io
from contextlib import redirect_stdout
buffer = io.StringIO()
with redirect_stdout(buffer):
help(len)
print('len' in buffer.getvalue())
Ожидаемый вывод:
TrueОфициальная документация: help
hexФункция · Числа
Записывает целое число шестнадцатеричной строкой.
Нюанс. В результат входят префикс 0x и строчные буквы.
hex(integer, /) — упрощённо; остальные варианты в документации
Представить целое число шестнадцатеричной строкой, например для чтения кодов. Для нулевого заполнения и отсутствия префикса используйте format.
value = 255
print(hex(value))
print(format(value, '04x'))
Ожидаемый вывод:
0xff 00ffОфициальная документация: hex
idФункция · Проверки
Возвращает идентификатор конкретного объекта.
Нюанс. После завершения жизни объекта тот же идентификатор может получить другой объект.
id(object, /) — упрощённо; остальные варианты в документации
Проверить, относятся ли ссылки к одному живому объекту. Не сохраняйте числовой id как постоянный ключ: после завершения жизни объекта значение может использоваться повторно.
record = []
alias = record
other = []
print(id(record) == id(alias))
print(id(record) != id(other))
Ожидаемый вывод:
True TrueОфициальная документация: id
inputФункция · Ввод и вывод
Читает строку из стандартного ввода.
Нюанс. Результат всегда строка; конец ввода вызывает EOFError.
input(prompt="", /) — упрощённо; остальные варианты в документации
Прочитать одну строку из стандартного ввода. Результат — str без завершающего перевода строки; числа и границы проверяют отдельно. Для этого примера stdin задан заранее.
Ввод для показанного результата:
Кабель
raw = input()
name = raw.strip()
print(name)
print(len(name))
Ожидаемый вывод:
Кабель 6Официальная документация: input
intТип / конструктор · Типы и преобразования
Преобразует число или строку в целое число.
Нюанс. При преобразовании float дробная часть отбрасывается к нулю, а не округляется вниз.
int(number=0, /); int(text, base=10) — упрощённо; остальные варианты в документации
Получить целое из строки или числа, либо разобрать запись в заданной системе счисления. Преобразование float отбрасывает дробную часть к нулю, а не округляет вниз.
quantity = int('12')
print(quantity + 3)
print(int('ff', 16))
print(int(-3.9))
Ожидаемый вывод:
15 255 -3Официальная документация: int
isinstanceФункция · Проверки
Проверяет принадлежность объекта к типу или его подклассам.
Нюанс. Проверка учитывает наследование; для строгого сравнения конкретного типа нужен type().
isinstance(object, classinfo, /) — упрощённо; остальные варианты в документации
Проверить тип с учётом наследования и принять несколько типов. bool наследуется от int: если логические значения запрещены, одной такой проверки целого недостаточно.
value = True
print(isinstance(value, int))
print(type(value) is int)
print(isinstance('report', (str, bytes)))
Ожидаемый вывод:
True False TrueОфициальная документация: isinstance
issubclassФункция · Проверки
Проверяет, наследуется ли один класс от другого.
Нюанс. Класс считается подклассом самого себя.
issubclass(class, classinfo, /) — упрощённо; остальные варианты в документации
Проверить отношение между классами при выборе реализации или регистрации обработчика. Аргументом должен быть класс, а не его экземпляр.
class Report:
pass
class CsvReport(Report):
pass
print(issubclass(CsvReport, Report))
print(issubclass(Report, CsvReport))
Ожидаемый вывод:
True FalseОфициальная документация: issubclass
iterФункция · Итерация
Получает обычный итератор или повторно вызывает функцию до стоп-значения.
Нюанс. В варианте с двумя аргументами остановка определяется равенством результата стоп-значению.
iter(iterable, /); iter(callable, sentinel, /) — упрощённо; остальные варианты в документации
Получить обычный итератор либо вызывать функцию до стоп-значения. Итератор расходуется при обходе; второй вариант удобен для чтения последовательных блоков.
source = iter([1, 2, 0, 3])
blocks = iter(lambda: next(source), 0)
print(list(blocks))
print(next(source))
Ожидаемый вывод:
[1, 2] 3Официальная документация: iter
lenФункция · Контейнеры
Возвращает количество элементов объекта.
Нюанс. Для строки считает кодовые точки Unicode, которые не всегда совпадают с видимыми символами.
len(object, /) — упрощённо; остальные варианты в документации
Узнать число элементов контейнера или кодовых точек строки. Длина Unicode-строки не обязательно равна числу видимых символов или размеру UTF-8 в байтах.
text = 'Ёж'
print(len(text))
print(len(text.encode('utf-8')))
Ожидаемый вывод:
2 4Официальная документация: len
listТип / конструктор · Контейнеры
Создаёт изменяемый список из перебираемого объекта.
Нюанс. Преобразование другого контейнера не делает глубокие копии вложенных элементов.
list(iterable=(), /) — упрощённо; остальные варианты в документации
Материализовать небольшой источник или создать изменяемую последовательность. Копирование внешнего контейнера не делает глубокой копии вложенных изменяемых объектов.
source = range(3)
values = list(source)
values.append(9)
print(values)
Ожидаемый вывод:
[0, 1, 2, 9]Официальная документация: list
localsФункция · Области видимости
Возвращает отображение локальных имён и их значений.
Нюанс. В функциях возвращает новый снимок; изменение этого словаря не переназначает локальные переменные.
locals() — упрощённо; остальные варианты в документации
Посмотреть локальные значения собственной функции при исследовании. Не используйте изменение возвращённого отображения как переносимый способ присвоить локальную переменную.
def describe(name, count):
values = locals()
return values['name'], values['count']
print(describe('demo', 3))
Ожидаемый вывод:
('demo', 3)
Официальная документация: localsmapТип / конструктор · Итерация
Лениво применяет функцию к элементам одного или нескольких перебираемых объектов.
Нюанс. По умолчанию останавливается на самом коротком; strict=True проверяет равенство длин.
map(function, iterable, /, *iterables, strict=False) — упрощённо; остальные варианты в документации
Лениво преобразовать записи функцией. Итератор одноразовый; при нескольких источниках обычный режим останавливается на коротком. strict доступен с Python 3.14.
converted = map(int, ['1', '2', '3'])
values = list(converted)
print(values)
print(list(converted))
Ожидаемый вывод:
[1, 2, 3] []Официальная документация: map
maxФункция · Числа и порядок
Возвращает наибольший элемент по самому значению или ключу сравнения.
Нюанс. Для пустого iterable нужен default, иначе возникает ValueError.
max(iterable, /, *, key=None[, default]); max(a, b, ...) — упрощённо; остальные варианты в документации
Выбрать запись с наибольшим ключом сравнения. default применим к пустому iterable; при равных ключах возвращается первый встретившийся элемент.
records = [{'name': 'A', 'count': 2}, {'name': 'B', 'count': 5}]
best = max(records, key=lambda row: row['count'])
print(best['name'])
print(max([], default='нет данных'))
Ожидаемый вывод:
B нет данныхОфициальная документация: max
memoryviewТип / конструктор · Байты и буферы
Предоставляет доступ к буферу без обязательного копирования данных.
Нюанс. Если исходный буфер изменяемый, изменения через представление затрагивают исходные данные.
memoryview(object) — упрощённо; остальные варианты в документации
Работать с поддерживающим буфер объектом без обязательного копирования байтов. Изменение доступного для записи view меняет исходный буфер; время жизни view важно для изменения размера буфера.
buffer = bytearray(b'abc')
with memoryview(buffer) as view:
view[1] = ord('Z')
print(view.tolist())
print(buffer.decode('ascii'))
Ожидаемый вывод:
[97, 90, 99] aZcОфициальная документация: memoryview
minФункция · Числа и порядок
Возвращает наименьший элемент по самому значению или ключу сравнения.
Нюанс. Для пустого iterable нужен default, иначе возникает ValueError.
min(iterable, /, *, key=None[, default]); min(a, b, ...) — упрощённо; остальные варианты в документации
Выбрать минимальное значение или запись по ключу, например самое дешёвое предложение. Для пустого источника явно решите, нужен default или ошибка.
prices = [12, 7, 9]
print(min(prices))
print(min([], default='нет цен'))
Ожидаемый вывод:
7 нет ценОфициальная документация: min
nextФункция · Итерация
Получает следующий элемент обычного итератора.
Нюанс. Без default конец итерации вызывает StopIteration.
next(iterator[, default], /) — упрощённо; остальные варианты в документации
Получить один элемент без полного обхода. Без default исчерпанный итератор вызывает StopIteration; с default позволяет явно обработать пустой остаток.
values = iter([10])
print(next(values))
print(next(values, 'конец'))
Ожидаемый вывод:
10 конецОфициальная документация: next
objectТип / конструктор · Классы и атрибуты
Создаёт базовый объект, от класса которого наследуются остальные классы.
Нюанс. У экземпляра object нет __dict__, поэтому произвольные атрибуты ему не назначить.
object() — упрощённо; остальные варианты в документации
Создать отдельный маркер отсутствия значения в переносимом коде. Сравнивайте его через is; в Python 3.15 для именованного маркера также существует sentinel.
MISSING = object()
record = {'value': None}
print(record.get('missing', MISSING) is MISSING)
print(record.get('value', MISSING) is MISSING)
Ожидаемый вывод:
True FalseОфициальная документация: object
octФункция · Числа
Записывает целое число восьмеричной строкой.
Нюанс. В результат входит префикс 0o.
oct(integer, /) — упрощённо; остальные варианты в документации
Представить целое в восьмеричном виде, например при чтении числовых масок. Префикс 0o отличает такую запись от десятичной.
value = 64
print(oct(value))
print(format(value, 'o'))
Ожидаемый вывод:
0o100 100Официальная документация: oct
openФункция · Ввод и вывод
Открывает файл и возвращает объект для чтения или записи.
Нюанс. Режим w обнуляет существующий файл; ресурс удобно закрывать конструкцией with.
open(file, mode="r", ..., encoding=None, errors=None, newline=None) — упрощённо; остальные варианты в документации
Открыть файл с понятным режимом и кодировкой; with закрывает ресурс. Режим w перезаписывает содержимое. Пример работает только в собственной временной папке.
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
path = Path(folder) / 'note.txt'
with open(path, 'w', encoding='utf-8') as stream:
stream.write('Привет\n')
with open(path, encoding='utf-8') as stream:
print(stream.read(), end='')
Ожидаемый вывод:
ПриветОфициальная документация: open
ordФункция · Текст и Unicode
Возвращает код одного символа Unicode или значение одного байта.
Нюанс. Строка, bytes или bytearray должны иметь длину ровно один.
ord(character, /) — упрощённо; остальные варианты в документации
Получить код одной кодовой точки Unicode или одного байта. Для строки из нескольких символов ord не подходит: сначала нужен явный выбор одного элемента.
letter = 'А'
print(ord(letter))
print(chr(ord(letter)) == letter)
Ожидаемый вывод:
1040 TrueОфициальная документация: ord
powФункция · Числа
Возводит число в степень, при необходимости вычисляя результат по модулю.
Нюанс. При целых аргументах отрицательная степень с mod означает поиск модульного обратного числа.
pow(base, exp, mod=None) — упрощённо; остальные варианты в документации
Вычислить степень; для целых со значением mod — результат по модулю без большого промежуточного числа. Отрицательная степень в модульной форме может находить обратный элемент.
base = 2
print(pow(base, 10))
print(pow(3, -1, 11))
Ожидаемый вывод:
1024 4Официальная документация: pow
printФункция · Ввод и вывод
Выводит текстовые представления объектов в текстовый поток.
Нюанс. Параметры sep, end, file и flush передаются только по имени.
print(*objects, sep=" ", end="\n", file=None, flush=False) — упрощённо; остальные варианты в документации
Вывести значения человеку или в выбранный текстовый поток. sep разделяет аргументы, end завершает запись; это не метод сериализации произвольных структур.
columns = ['name', 'quantity']
print(*columns, sep=';')
print('готово', end='!\n')
Ожидаемый вывод:
name;quantity готово!Официальная документация: print
propertyДекоратор / тип · Классы и атрибуты
Создаёт управляемый атрибут с функциями чтения, записи и удаления.
Нюанс. Без setter присваивание этому свойству запрещено.
property(fget=None, fset=None, fdel=None, doc=None); обычно @property — упрощённо; остальные варианты в документации
Предоставить вычисляемый или управляемый атрибут объекта. Getter выполняется при обращении; без setter обычное присваивание этому свойству запрещено.
class Invoice:
def __init__(self):
self._cents = 1250
@property
def amount(self):
return self._cents / 100
item = Invoice()
print(item.amount)
try:
item.amount = 99
except AttributeError:
print('Только чтение')
Ожидаемый вывод:
12.5 Только чтениеОфициальная документация: property
rangeТип / конструктор · Контейнеры
Создаёт компактную неизменяемую последовательность целых чисел.
Нюанс. Правая граница stop не входит в последовательность, а step не может быть нулём.
range(stop, /); range(start, stop, step=1, /) — упрощённо; остальные варианты в документации
Описать последовательность целых без хранения списка всех значений. Граница stop не включается, шаг не может быть нулём.
values = range(2, 10, 3)
print(list(values))
print(len(values))
Ожидаемый вывод:
[2, 5, 8] 3Официальная документация: range
reprФункция · Представление и форматирование
Возвращает представление объекта для исследования и отладки.
Нюанс. Не каждое представление является выражением, пригодным для обратного восстановления объекта.
repr(object, /) — упрощённо; остальные варианты в документации
Получить представление для отладки, позволяющее увидеть кавычки и управляющие символы. Не рассчитывайте, что repr любого объекта можно безопасно восстановить через eval.
text = 'line\nend'
representation = repr(text)
print(representation)
Ожидаемый вывод:
'line\nend'Официальная документация: repr
reversedТип / конструктор · Итерация
Создаёт итератор по элементам в обратном порядке.
Нюанс. Не сортирует значения и требует поддержки обратной итерации либо протокола последовательности.
reversed(sequence, /) — упрощённо; остальные варианты в документации
Обойти подходящую последовательность в обратном направлении без изменения исходного списка. Произвольный одноразовый итератор не всегда поддерживает reversed.
values = [1, 2, 3]
print(list(reversed(values)))
print(values)
Ожидаемый вывод:
[3, 2, 1] [1, 2, 3]Официальная документация: reversed
roundФункция · Числа
Округляет число до выбранной десятичной позиции.
Нюанс. Равноудалённые значения округляет к чётному; двоичная точность float влияет на результат.
round(number, ndigits=None) — упрощённо; остальные варианты в документации
Округлить по правилам типа. Для встроенных чисел половины обычно идут к чётному; двоичное представление float может отдельно влиять на десятичный результат.
values = [2.5, 3.5]
print([round(value) for value in values])
print(round(2.675, 2))
Ожидаемый вывод:
[2, 4] 2.67Официальная документация: round
setТип / конструктор · Контейнеры
Создаёт изменяемое множество уникальных хешируемых элементов.
Нюанс. Порядок обхода не гарантируется, а литерал {} создаёт словарь.
set(iterable=(), /) — упрощённо; остальные варианты в документации
Убрать повторы и выполнять проверки принадлежности или операции множеств. Элементы должны быть хешируемыми, порядок для вывода нужно задавать отдельно.
source = [3, 1, 3, 2]
unique = set(source)
print(sorted(unique))
print(2 in unique)
Ожидаемый вывод:
[1, 2, 3] TrueОфициальная документация: set
setattrФункция · Классы и атрибуты
Назначает атрибуту объекта значение по строковому имени.
Нюанс. Объект должен разрешать назначение; имя не обязательно является допустимым идентификатором Python.
setattr(object, name, value, /) — упрощённо; остальные варианты в документации
Назначить атрибут по известному строковому имени, например при заполнении своего объекта. Для внешних данных используйте разрешённый список имён, а не произвольное назначение.
class Draft:
pass
item = Draft()
setattr(item, 'title', 'Отчёт')
print(item.title)
Ожидаемый вывод:
ОтчётОфициальная документация: setattr
sentinelТип / конструктор · Типы и преобразования
Создаёт уникальный именованный маркер для отсутствующего или особого значения.
Нюанс. Появился в 3.15; маркеры истинны и для проверки их идентичности используют is.
sentinel(name, /, *, repr=None) — упрощённо; остальные варианты в документации
Начиная с Python 3.15 создать уникальный именованный маркер, отличающий отсутствие аргумента от None. Сравнивайте его через is; сам маркер истинный.
MISSING = sentinel('MISSING')
def describe(value=MISSING):
if value is MISSING:
return 'Не передано'
return repr(value)
print(describe())
print(describe(None))
print(bool(MISSING))
Ожидаемый вывод:
Не передано None TrueОфициальная документация: sentinel
sliceТип / конструктор · Индексы и срезы
Создаёт объект, описывающий границы и шаг среза.
Нюанс. Сам объект ничего не вырезает; его передают индексируемому объекту.
slice(stop); slice(start, stop, step=None) — упрощённо; остальные варианты в документации
Сохранить правила среза в отдельном объекте и применить их к последовательности. indices помогает получить нормализованные границы для конкретной длины.
values = list(range(6))
selection = slice(1, 6, 2)
print(values[selection])
print(selection.indices(len(values)))
Ожидаемый вывод:
[1, 3, 5] (1, 6, 2)Официальная документация: slice
sortedФункция · Числа и порядок
Возвращает новый список элементов в отсортированном порядке.
Нюанс. Исходный контейнер сохраняется; элементы с одинаковым ключом сохраняют взаимный порядок.
sorted(iterable, /, *, key=None, reverse=False) — упрощённо; остальные варианты в документации
Получить новый отсортированный список без изменения источника. key задаёт смысл сравнения; сортировка стабильна, поэтому элементы с равными ключами сохраняют прежний порядок.
names = ['B', 'a', 'A']
print(sorted(names, key=str.casefold))
print(names)
Ожидаемый вывод:
['a', 'A', 'B'] ['B', 'a', 'A']Официальная документация: sorted
staticmethodДекоратор / тип · Классы и атрибуты
Создаёт метод без автоматически передаваемого экземпляра или класса.
Нюанс. При вызове Python не добавляет self или cls.
staticmethod(function); обычно @staticmethod — упрощённо; остальные варианты в документации
Связать вспомогательную функцию с классом, не передавая автоматически self или cls. Если связь с классом не помогает пониманию, достаточно обычной функции модуля.
class Validator:
@staticmethod
def positive(text):
return int(text) > 0
print(Validator.positive('3'))
validator = Validator()
print(validator.positive('0'))
Ожидаемый вывод:
True FalseОфициальная документация: staticmethod
strТип / конструктор · Типы и преобразования
Создаёт строковое представление объекта или декодирует байты.
Нюанс. Для декодирования bytes нужна кодировка; str(bytes) без неё даёт представление байтов.
str(object=""); str(bytes, encoding, errors="strict") — упрощённо; остальные варианты в документации
Получить строковое представление либо явно декодировать байты. str(bytes) без encoding даёт представление байтов, а не раскодированный текст.
data = 'Привет'.encode('utf-8')
print(str(data, encoding='utf-8'))
print(str(42))
Ожидаемый вывод:
Привет 42Официальная документация: str
sumФункция · Числа
Суммирует элементы с начальным значением start.
Нюанс. Для соединения строк используется join(), поскольку строковый start здесь запрещён.
sum(iterable, /, start=0) — упрощённо; остальные варианты в документации
Сложить числовые значения с начальным итогом. Пустой источник возвращает start; для объединения строк используйте join, а не sum.
quantities = [2, 3, 4]
print(sum(quantities))
print(sum([], start=10))
Ожидаемый вывод:
9 10Официальная документация: sum
superТип / конструктор · Классы и атрибуты
Создаёт посредник для поиска следующей реализации в цепочке наследования.
Нюанс. Следует порядку MRO, поэтому следующий класс не обязательно является прямым родителем.
super(); super(type, object_or_type=None) — упрощённо; остальные варианты в документации
Обратиться к следующей реализации по MRO в методе наследника. Это механизм согласованного наследования, а не просто сокращение имени непосредственного родителя.
class Base:
def describe(self):
return 'база'
class Report(Base):
def describe(self):
return super().describe() + ': отчёт'
print(Report().describe())
Ожидаемый вывод:
база: отчётОфициальная документация: super
tupleТип / конструктор · Контейнеры
Создаёт неизменяемую последовательность из перебираемого объекта.
Нюанс. Вложенные изменяемые элементы остаются изменяемыми.
tuple(iterable=(), /) — упрощённо; остальные варианты в документации
Сохранить последовательность с неизменяемой внешней структурой. Вложенные списки остаются изменяемыми; tuple не выполняет глубокое замораживание данных.
source = [1, 2]
snapshot = tuple(source)
source.append(3)
print(snapshot)
print(tuple())
Ожидаемый вывод:
(1, 2) ()Официальная документация: tuple
typeТип / конструктор · Классы и атрибуты
Возвращает тип объекта или создаёт класс из имени, баз и словаря.
Нюанс. Для проверки с учётом наследования предпочтительнее isinstance().
type(object); type(name, bases, namespace, **kwargs) — упрощённо; остальные варианты в документации
Узнать точный тип или создать класс программно. Для проверки наследования обычно нужен isinstance; для обычного описания класса читаемее конструкция class.
Report = type('Report', (object,), {'limit': 3})
item = Report()
print(type(item).__name__)
print(item.limit)
print(type(7).__name__)
Ожидаемый вывод:
Report 3 intОфициальная документация: type
varsФункция · Области видимости
Возвращает __dict__ объекта, а без аргумента работает как locals().
Нюанс. У объектов без __dict__ возникает TypeError, например у некоторых экземпляров со __slots__.
vars(); vars(object, /) — упрощённо; остальные варианты в документации
Посмотреть __dict__ собственного объекта либо локальные имена без аргумента. Объекты со slots или без __dict__ могут не поддерживать этот вызов.
class Settings:
pass
settings = Settings()
settings.limit = 3
settings.mode = 'demo'
print(sorted(vars(settings).items()))
Ожидаемый вывод:
[('limit', 3), ('mode', 'demo')]
Официальная документация: varszipТип / конструктор · Итерация
Лениво объединяет элементы нескольких перебираемых объектов в кортежи.
Нюанс. По умолчанию обрезает до самой короткой последовательности; strict=True обнаруживает разную длину.
zip(*iterables, strict=False) — упрощённо; остальные варианты в документации
Сопоставить элементы нескольких источников по позиции. Обычно обход заканчивается на коротком; strict=True выявляет разную длину и доступен с Python 3.10.
pairs = list(zip(['A', 'B'], [1, 2], strict=True))
print(pairs)
try:
list(zip([1, 2], [3], strict=True))
except ValueError:
print('Разная длина')
Ожидаемый вывод:
[('A', 1), ('B', 2)]
Разная длина
Официальная документация: zip__import__Функция · Импорт
Вызывает низкоуровневый механизм импорта модуля.
Нюанс. Для обычного динамического импорта документация рекомендует importlib.import_module().
__import__(name, globals=None, locals=None, fromlist=(), level=0) — упрощённо; остальные варианты в документации
Обратиться к низкоуровневому импорту при исследовании механизма. В обычном коде используйте import, а для динамического имени чаще importlib.import_module.
module = __import__('math')
print(module.sqrt(9))
print(module.ceil(2.4))
Ожидаемый вывод:
3.0 3Официальная документация: __import__
Первичные источники главы:
Примеры и материалы с собой
Архив содержит наши самостоятельные примеры, тестовые данные, ожидаемый результат и README. Указанные команды установки и фрагменты REPL отделены от скриптов, которые проверены запуском.
Сверено с официальной документацией 2026-10-12. Стандартная библиотека и сторонние пакеты различаются; ссылки на источники есть в каждой главе.


