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

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

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

Условия, циклы и сопоставление с образцом

Описать варианты работы и пройти данные без лишних проверок.

Условие выбирает действие, цикл повторяет его для данных, а match сопоставляет структуру. Начинайте с правил задачи: какие значения допустимы, что делать с пропуском и когда обработку можно закончить. Отдельные ясные ветки обычно полезнее сложного выражения, в котором проверка и изменение состояния смешаны.

Условие и выбор одного результата

if проверяет истинность выражения. elif описывает следующие варианты, else — оставшийся. Выполняется первая подходящая ветка. Поэтому порядок условий важен: более общее правило, поставленное раньше, может поглотить специальное. Для диапазонов проверяйте границы отдельно: «до десяти» и «не больше десяти» расходятся ровно на одном значении.

Тернарное выражение "готово" if complete else "в работе" выбирает значение. Оно удобно для небольшого выбора, но длинные вложенные варианты затрудняют чтение. Если у веток несколько действий или собственные проверки, используйте обычный if. Не подменяйте проверку пользовательского ввода assert: в оптимизированном запуске утверждения могут быть отключены.

Цикл по данным, continue и пропуски

for берёт элементы iterable по очереди. Вам обычно не нужно вручную увеличивать индекс. continue пропускает остаток текущей итерации и переходит к следующей. Это удобно для отсутствующей записи, однако условие пропуска должно соответствовать данным: нулевое количество иногда является допустимым значением, а None обозначает отсутствие.

records = [None, 0, 3, -1, 2]
accepted = []
for count in records:
    if count is None:
        continue
    if count < 0:
        print("Пропущено отрицательное:", count)
        continue
    accepted.append(count)
print("Приняты:", accepted)
print("Сумма:", sum(accepted))
Пропущено отрицательное: -1
Приняты: [0, 3, 2]
Сумма: 5

Для номера используйте enumerate, для параллельного обхода согласованных последовательностей — zip. Если цикл изменяет ту же коллекцию, по которой идёт, продумайте отдельную стратегию. Новый результирующий список часто проще и надёжнее удаления позиций на месте. Сложный набор фильтров можно вынести в функцию с понятным именем.

Не теряйте информацию о пропущенных записях, если она важна читателю отчёта. Иногда continue должен сопровождаться увеличением счётчика ошибок или сохранением причины отдельно от результата. Пустой результат после фильтрации не обязательно означает, что вход был пуст: все записи могли быть недопустимыми. Различайте эти состояния перед вычислением среднего, выводом «успех» или переходом к следующему шагу.

While: условие завершения и состояние

while повторяется, пока условие истинно. Он подходит, когда заранее неизвестно число шагов, но есть правило завершения. Внутри должен происходить переход, который приближает к завершению: уменьшение оставшегося количества, изменение состояния или получение нового ввода. Если этот переход случайно пропущен из-за continue, получится бесконечный цикл.

Ограничение попыток удобно записывать явно. Не считайте ожидание ресурса обычным вычислительным циклом, который может бесконечно крутиться без паузы. В реальной программе повторные сетевые попытки требуют отдельной политики таймаута и остановки; в учебной задаче сначала проверяйте сам счётчик и ветку последней попытки. Pass ничего не делает и может обозначить временно пустой блок, но не завершает цикл.

remaining = 3
while remaining > 0:
    print("Осталось:", remaining)
    remaining -= 1
print("Завершено")
Осталось: 3
Осталось: 2
Осталось: 1
Завершено

Break и else у цикла

break заканчивает ближайший цикл. Else у for или while выполняется, если цикл завершился без break. Это удобно для поиска: найденный элемент вызывает break, а else сообщает отсутствие. Else может выполниться и для пустой последовательности, потому что никакого break не было. Исключение или return прерывают дальнейшее выполнение; это не обычное завершение с последующим else.

for names in (["HTML", "CSS", "Python"], []):
    for index, name in enumerate(names):
        if name == "Python":
            print("Найдено на позиции:", index)
            break
    else:
        print("Не найдено")
Найдено на позиции: 2
Не найдено

Break относится только к ближайшему циклу, поэтому во вложенных обходах он не выходит сразу из всех уровней. Часто такое действие проще оформить функцией и вернуть найденный результат. Следите за смыслом слова «найдено»: пустая строка или нулевой индекс могут быть корректным результатом, поэтому не проверяйте их только по истинности.

Match/case: форма данных, а не только равенство

С Python 3.10 match/case сопоставляет значение с образцами. Образец списка может проверить количество элементов и захватить части; образец словаря — требуемые ключи. Дополнительный guard после if проверяет захваченные значения. Выбирается первая подходящая ветка, дальнейшего проваливания в соседние case нет. Конструкция особенно удобна для нескольких форм команды или события.

commands = [["echo", "привет"], ["sum", 2, 3], ["sum", 2], {"action": "ping"}]
for command in commands:
    match command:
        case ["echo", str(text)]:
            print(text)
        case ["sum", int(a), int(b)] if type(a) is int and type(b) is int:
            print(a + b)
        case {"action": "ping"}:
            print("pong")
        case _:
            print("Неподдерживаемая команда")
привет
5
Неподдерживаемая команда
pong

Голое имя в case обычно захватывает значение, а не сравнивает его с уже известной переменной. Для констант используют литерал или именованный атрибут вроде Status.READY. Подчёркивание — образец без сохранения значения. Образец int(x) принимает и bool как подтип int; в примере guard отдельно требует точный int. Выбирайте строгость по договору команды.

Короткое преобразование и новое в 3.15

List, set и dict comprehensions описывают построение результата. Читайте их как «взять элементы, при необходимости отфильтровать, получить новые значения». Когда выражение содержит много веток или изменяет внешнее состояние, обычный цикл яснее. У генераторного выражения результат ленивый и последующее выполнение переносится на момент обхода; не принимайте его за уже готовый список.

Python 3.15 добавляет распаковку * и ** в comprehensions. Она позволяет объединить несколько iterable или отображений. В старом интерпретаторе такой синтаксис не выполнится, поэтому у примера ниже стоит версия 3.15+. Обычная вложенная comprehension остаётся вариантом для предыдущих версий и иногда лучше показывает структуру шага.

groups = [[1, 2], [], [3]]
new_way = [*group for group in groups]
classic = [value for group in groups for value in group]
print(new_way)
print(new_way == classic)
[1, 2, 3]
True

Упражнение: первое положительное значение

Найдите первое число больше нуля в [0, -2, 7, 4]. Если такого значения нет, напечатайте «Нет подходящего». Повторите поиск для пустого списка. Важно напечатать только первый найденный результат и не сообщить об отсутствии после успешного поиска.

Решение упражнения
for values in ([0, -2, 7, 4], []):
    for value in values:
        if value > 0:
            print(value)
            break
    else:
        print("Нет подходящего")
7
Нет подходящего

Формальные правила: составные инструкции; новые конструкции отдельно описаны в изменениях 3.15.

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

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

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