Перейти к содержимому
Поиск
Разработка

Python: полный мануал с примерами и справочником функций

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

Александр Некрасов
Python: практический мануал с кодом, папкой и схемой работы

Python удобно изучать на задачах: посчитать расходы, разобрать текст, прочитать файл, собрать отчёт. В этом руководстве пройдём путь от установки и первых выражений до функций, классов, сети, тестов и самостоятельных проектов.

Выберите одну из 25 глав или найдите нужную функцию через поиск. В справочнике собраны все 73 позиции официальной таблицы встроенных функций и типов Python 3.15, а также 161 метод и 12 свойств строк, коллекций и путей. Для каждой позиции есть назначение, важный нюанс и ссылка на первичную документацию.

Код можно копировать и скачивать. 195 самостоятельных примеров проверены запуском на Python 3.15.0; у упражнений есть решения и ожидаемый результат. Новые возможности языка отмечены в тексте, а интерактивные фрагменты и команды установки объяснены отдельно.

Если начинаете с нуля, открывайте главы по порядку. Если решаете конкретную задачу, ищите по-русски или по имени Python: open, str.split, Path.read_text.

Python 3.15.025 главПримеры проверены запуском
Все главы руководства 25

Глава 3 · начальный

Числа, округление и точные расчёты

Выбрать представление числа под расчёт и не потерять точность незаметно.

Тип числа выбирают по смыслу результата. Количество записей обычно целое, измерение может быть приблизительным, а расчёт по десятичным правилам требует заранее выбранного округления. Не начинайте с формата красивой строки: сначала определите, какая точность допустима и где производится округление. Формат вывода сам по себе не делает исходное вычисление точным.

Целые числа и три разных деления

int хранит целые числа и не ограничивается обычным 32-битным диапазоном, хотя большие числа требуют памяти и времени. / выполняет обычное деление и для двух целых даёт float. // округляет частное вниз, к минус бесконечности, а не просто отбрасывает дробную часть. Поэтому -7 // 3 равно −3.

Остаток % согласован с целочисленным делением: a == (a // b) * b + a % b при ненулевом делителе. Для положительного делителя остаток неотрицателен. Это удобно для распределения количества по коробкам или минут по часам. Деление на ноль вызывает ошибку; проверка пустого набора данных и проверка нулевого делителя — разные необходимые границы.

Преобразование типа тоже является решением. int("12") читает целое из строки, а int("12.0") вызовет ValueError. Промежуточное float() не стоит добавлять только для обхода такой ошибки: int(12.9) молча отбросит дробную часть. У отрицательного числа это усечение к нулю, поэтому int(-3.9) даёт −3, а не округление вниз. Для количества, возраста или индекса проверьте формат входа и диапазон, прежде чем выполнять расчёт. Десятичная запятая в пользовательском тексте также требует заранее выбранного правила разбора.

Почему 0.1 + 0.2 не совпадает с 0.3

Обычный float хранит двоичное приближение. Некоторые простые десятичные дроби не имеют в нём точного представления. Это не ошибка сложения Python и не признак случайного результата. Для приблизительных измерений сравнивайте с осмысленной относительной или абсолютной погрешностью, например через math.isclose(). Погрешность выбирает задача, а не сам факт использования этой функции.

import math

value = 0.1 + 0.2
print(value)
print(value == 0.3)
print(math.isclose(value, 0.3, rel_tol=1e-9, abs_tol=0.0))
print(-7 // 3, -7 % 3)
0.30000000000000004
False
True
-3 2

Рядом с нулём относительного допуска может оказаться недостаточно; тогда задают подходящий abs_tol. Отдельно обрабатывайте нечисловые результаты вроде NaN, если ваш алгоритм может их получить. Например, сравнение NaN с самим собой не подтверждает равенство. Для диагностики существуют math.isnan() и math.isfinite(); допустимость бесконечности определяется договором расчёта.

Округление и десятичные правила

round() при точной половине использует ближайшее чётное: round(2.5) даёт 2, round(3.5) — 4. Но неожиданное round(2.675, 2) связано ещё и с двоичным представлением исходного float. Это два разных вопроса: как представлено число и какое правило выбирается для половины. Не исправляйте их добавлением случайной маленькой константы.

Для десятичного расчёта создавайте Decimal из строки. Decimal(0.1) переносит уже существующее двоичное приближение; Decimal("0.1") задаёт нужное десятичное значение. Точность контекста и момент округления всё равно нужно определить. В примере итог округляется один раз до двух знаков по явно выбранному правилу ROUND_HALF_UP.

from decimal import Decimal, ROUND_HALF_UP

price = Decimal("239.90")
quantity = 3
discount = Decimal("0.10")
total = price * quantity * (Decimal("1") - discount)
result = total.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result)
print(round(2.5), round(3.5))
647.73
2 4

Это пример выбранной политики, а не универсальное правило для любой цены или отчёта. Если задача требует округлять каждую строку, итог может отличаться от округления общей суммы. Запишите это требование рядом с расчётом и проверьте пограничные значения. Поведение подробно описано в документации Decimal.

Доли и комплексные числа

Fraction хранит рациональное число как отношение целых. Например, Fraction(1, 3) полезна для точных долей; сумма одной трети и одной шестой равна половине. Создание Fraction из float также наследует его приближение, поэтому выбирайте числитель/знаменатель или подходящую строку. Большие дроби могут быстро увеличить объём вычислений.

complex представляет число с действительной и мнимой частями, например 3 + 4j. У него есть .real, .imag, а abs() даёт модуль. Комплексные числа нельзя упорядочить обычным <: нужен осмысленный критерий, например модуль. Математические функции для них доступны в cmath; обычный math предназначен для действительных аргументов.

Функции math и небольшая выборка

Стандартный math содержит корни, тригонометрические функции и другие численные операции. math.isqrt() вычисляет целую часть квадратного корня целого без промежуточного float. Для простого среднего и медианы есть statistics. Медиана меньше зависит от крайних значений, но сама по себе не объясняет качество выборки: количество наблюдений и смысл пропусков всё ещё важны.

Встроенные abs(), min(), max() и sum() помогают выразить простой расчёт без собственного цикла. sum([]) даёт ноль, но минимум пустой выборки без default вызвать нельзя. Не переносите соглашение одной функции на все остальные. Запишите, что означает отсутствие наблюдений, прежде чем выбирать значение по умолчанию для отчёта.

from fractions import Fraction
from statistics import median, mean
import math

values = [12, 18, 9, 21, 18]
print("Медиана:", median(values))
print(f"Среднее: {mean(values):.1f}")
print("Доля:", Fraction(1, 3) + Fraction(1, 6))
print("Целый корень:", math.isqrt(27))
Медиана: 18
Среднее: 15.6
Доля: 1/2
Целый корень: 5

Воспроизводимая случайность и секреты

random создаёт псевдослучайные последовательности. Для учебной модели удобно отдельное Random(seed): повтор в той же проверяемой среде даёт ту же последовательность и не меняет общий генератор программы. Не превращайте такой seed в пароль. Для непредсказуемых токенов существует secrets; сам токен не должен появляться в журнале учебного теста.

import random
import secrets

first = random.Random(42)
second = random.Random(42)
a = [first.randint(1, 6) for _ in range(5)]
b = [second.randint(1, 6) for _ in range(5)]
print("Повтор совпал:", a == b)
print("Все броски допустимы:", all(1 <= value <= 6 for value in a))
print("Длина hex-токена:", len(secrets.token_hex(4)))
Повтор совпал: True
Все броски допустимы: True
Длина hex-токена: 8

Упражнение: пустая выборка

Для списка измерений напечатайте медиану, а для пустого списка — «Нет данных». Пустая выборка не должна молча превращаться в нулевое измерение: ноль — отдельное реальное значение. Проверьте оба случая и поясните, почему условие выполняется до вызова статистической функции.

Решение упражнения
from statistics import median

for values in ([], [0, 2, 4]):
    if values:
        print("Медиана:", median(values))
    else:
        print("Нет данных")
Нет данных
Медиана: 2

Примеры и материалы с собой

Архив содержит наши самостоятельные примеры, тестовые данные, ожидаемый результат и README. Указанные команды установки и фрагменты REPL отделены от скриптов, которые проверены запуском.

Сверено с официальной документацией 2026-10-12. Стандартная библиотека и сторонние пакеты различаются; ссылки на источники есть в каждой главе.