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
Глава 4 · начальный
Строки, Unicode, форматирование и регулярные выражения
Подготовить текст, отделить байты от символов и получить предсказуемый формат.
Строка хранит текст, но «текст» не всегда означает то, что человек считает одним видимым знаком. При обработке имён, выгрузок и сообщений важно различать символы Unicode, байты файла и формат отображения. Сначала определите договор: какие пробелы можно убрать, какая кодировка используется и какую структуру ожидает следующая часть программы.
Строка неизменяема, индекс считает кодовые точки
str — неизменяемая последовательность Unicode. Индекс text[0] получает элемент, срез text[:3] создаёт строку с выбранным фрагментом. Заменить символ присваиванием text[0] = "А" нельзя: создайте новый текст. Индексация пустой строки вызывает IndexError, а срез спокойно вернёт пустую строку. Выбирайте операцию по ожидаемой границе.
len(str) считает кодовые точки, а не обязательно видимые знаки. Буква с комбинируемым ударением или некоторые эмодзи состоят из нескольких точек. Для сравнения текстов полезна согласованная нормализация через unicodedata.normalize(). Она не означает, что любые визуально похожие знаки становятся одним символом: правила сравнения и допустимый алфавит всё равно нужно определить.
import unicodedata
text = "é"
normalized = unicodedata.normalize("NFC", text)
print(len(text), len(normalized))
data = "Привет".encode("utf-8")
print(type(data).__name__)
print(data.decode("utf-8"))
try:
b"\xff".decode("utf-8")
except UnicodeDecodeError as error:
print(type(error).__name__)
2 1 bytes Привет UnicodeDecodeError
Байты и кодировка
bytes — последовательность чисел 0–255. encode() превращает текст в байты по кодировке, decode() выполняет обратное преобразование. Укажите кодировку формата явно, когда читаете данные. Если байты не соответствуют UTF-8, ошибка помогает обнаружить несогласованный источник. Режим errors="ignore" может незаметно удалить данные; применять его просто для исчезновения сообщения не стоит.
С Python 3.15 UTF-8 используется по умолчанию в соответствующем режиме ввода-вывода, но внешние файлы могут оставаться в другой кодировке. Строка уже не является «UTF-8 строкой»: UTF-8 описывает её байтовую запись. Отделяйте эти уровни в названиях переменных, например payload_bytes и message_text. Это упрощает диагностику двойного кодирования.
Очистка: strip, split и join
strip() без аргумента удаляет крайние пробельные символы. С аргументом он получает набор отдельных символов, а не буквальный суффикс. Для удаления конкретного начала или конца используйте removeprefix() и removesuffix(). Иначе имя файла может сократиться сильнее, чем вы предполагали.
filename = "copy.py"
print(filename.strip(".py"))
print(filename.removesuffix(".py"))
raw = " дизайн разработка практика "
words = raw.split()
print(words)
print(" / ".join(words))
co copy ['дизайн', 'разработка', 'практика'] дизайн / разработка / практика
split() без разделителя объединяет серии пробелов и не создаёт пустых краёв. С явным разделителем поведение другое: "a;;b".split(";") сохраняет пустое поле между точками с запятой. join() соединяет строки выбранным разделителем; числа сначала надо превратить в строки. Для CSV с кавычками берите модуль csv: обычный split не понимает экранирование и разделитель внутри поля.
Поиск, замена и сравнение регистра
Членство part in text удобно, когда нужен только ответ «найдено?». find() возвращает индекс или −1; проверка if text.find(part): ошибочна, потому что нулевой индекс ложный, а −1 истинный. index() вместо −1 вызывает исключение. Выбирайте вариант по тому, требуется ли отсутствие считать обычным результатом или нарушением договора.
replace() создаёт новую строку; старую нужно явно заменить именем результата. Для безрегистрового сравнения Unicode обычно подходит casefold(), который шире простого lower. Перед сравнением можно нормализовать текст, но не удаляйте значимые символы без правила задачи. Имя человека, артикул и поисковый запрос могут требовать разных стратегий.
Форматирование числа и длинного текста
F-строка вычисляет выражения внутри фигурных скобок и сразу создаёт текст. Спецификатор после двоеточия управляет отображением: .2f задаёт два знака после точки, 04d — целое с дополнением нулями до четырёх позиций. Отображение округлённого float не исправляет исходную погрешность. Для десятичных правил используйте подходящий численный тип до форматирования.
Встроенный format(value, ".2f") применяет тот же договор формата к одному значению. Метод строки "{name}: {value:.2f}".format(name="Сумма", value=amount) удобен для заранее подготовленного шаблона. Это разные интерфейсы: format у значения не ищет именованные поля, а метод строки подставляет их в текст. Литерал f-строки вычисляется сразу в текущем коде. Не выбирайте eval для обработки отдельного шаблона: обычно нужен понятный формат и явные данные.
import re
amount = 2490.5
print(f"Сумма: {amount:.2f}")
print(f"Номер: {7:04d}")
for text in ("Заказ-0073", "Заказ-A73", ""):
match = re.fullmatch(r"Заказ-(?P<number>[0-9]+)", text)
print(int(match.group("number")) if match else "Некорректный номер")
Сумма: 2490.50 Номер: 0007 73 Некорректный номер Некорректный номер
Для переноса обычного текста есть textwrap.fill(), для удаления общего отступа многострочной заготовки — textwrap.dedent(). Это текстовые операции, они не заменяют переносы интерфейса браузера. Отдельно учитывайте значимые переводы строк в исходнике: автоматическое выравнивание может изменить смысл стихотворения, кода или адресного блока.
Регулярное выражение и t-строка
Регулярное выражение полезно для небольшой устойчивой формы. fullmatch() проверяет всю строку, search() ищет фрагмент, findall() собирает совпадения. В предыдущем примере используются только ASCII-цифры [0-9]; \d также распознаёт другие Unicode-цифры. Не пытайтесь разбирать произвольный HTML или полноценный CSV одной регуляркой: для структуры выбирайте соответствующий парсер.
Префикс r у строкового литерала удобен для регулярных выражений: он сохраняет обратные косые черты для синтаксиса самого re. Это не отключает специальные символы регулярного выражения. Если нужно искать введённый пользователем текст буквально, подготовьте его через re.escape(); тогда точка или скобка не превратятся в команду шаблона. Не добавляйте escape ко всему готовому выражению, иначе исчезнет и задуманный синтаксис поиска.
Начиная с Python 3.14 t-строка возвращает Template, а не готовую строку. Она отделяет постоянные фрагменты от интерполяций. Обработчик шаблона решает, как собрать конечный результат. Сам синтаксис не экранирует HTML, не параметризует SQL и не обещает безопасную вставку данных. Новая конструкция нужна там, где обработка значений должна быть контролируемой отдельно от записи шаблона.
name = "<Анна>"
template = t"Привет, {name}!"
print(type(template).__name__)
print(template.strings)
print(template.values[0])
Template
('Привет, ', '!')
<Анна>
Упражнение: подготовить список подписей
Есть подписи с крайними пробелами и пустая запись. Уберите только крайние пробелы, исключите пустой результат и соедините оставшееся через запятую с пробелом. Сохраните внутренний пробел у «Новый проект». Ожидаются две подписи без пустой позиции. Это полезный маленький шаг перед формированием меню или отчёта.
Решение упражнения
raw = [" Дизайн ", " ", " Новый проект "]
cleaned = [value.strip() for value in raw]
print(", ".join(value for value in cleaned if value))
Дизайн, Новый проект
Справочные детали: re, Unicode, t-строки и Template.
Методы и свойства str
Все 47 публичных методов, имеющих отдельные сигнатуры str.* на странице Built-in Types.
str.capitalizeМетод · Регистр
Делает первый символ заглавным, а остальные строчными.
Нюанс. Первый символ приводится к titlecase; исходная строка не изменяется.
Официальная документация: str.capitalizestr.casefoldМетод · Регистр
Нормализует регистр для сравнения текста без учёта регистра.
Нюанс. Преобразование сильнее lower(), например немецкое ß превращается в ss.
Официальная документация: str.casefoldstr.centerМетод · Выравнивание
Дополняет строку с двух сторон до заданной ширины.
Нюанс. Если ширина не больше длины, сокращения строки не происходит.
Официальная документация: str.centerstr.countМетод · Поиск
Считает неперекрывающиеся вхождения подстроки.
Нюанс. Для пустой подстроки без границ результат равен длине строки плюс один.
Официальная документация: str.countstr.encodeМетод · Кодировки
Кодирует текст в bytes.
Нюанс. По умолчанию использует UTF-8; errors='ignore' может незаметно потерять данные.
Официальная документация: str.encodestr.endswithМетод · Поиск
Проверяет окончание строки.
Нюанс. Можно передать кортеж допустимых окончаний, но не регулярное выражение.
Официальная документация: str.endswithstr.expandtabsМетод · Выравнивание
Заменяет табуляции пробелами до следующей позиции табуляции.
Нюанс. Количество добавленных пробелов зависит от текущей колонки.
Официальная документация: str.expandtabsstr.findМетод · Поиск
Возвращает позицию первого вхождения подстроки.
Нюанс. Если подстроки нет, возвращает -1; проверять результат как bool нельзя.
Официальная документация: str.findstr.formatМетод · Форматирование
Подставляет значения в поля шаблона в фигурных скобках.
Нюанс. Литералы фигурных скобок в шаблоне записываются как {{ и }}.
Официальная документация: str.formatstr.format_mapМетод · Форматирование
Подставляет именованные значения прямо из переданного отображения.
Нюанс. Отображение не копируется в dict, поэтому могут работать его __missing__ и другие настройки.
Официальная документация: str.format_mapstr.indexМетод · Поиск
Возвращает позицию первого вхождения подстроки.
Нюанс. При отсутствии вызывает ValueError, в отличие от find().
Официальная документация: str.indexstr.isalnumМетод · Проверки
Проверяет, состоит ли непустой текст только из букв и числовых символов.
Нюанс. Использует Unicode, поэтому допустимые символы не ограничены латиницей и ASCII-цифрами.
Официальная документация: str.isalnumstr.isalphaМетод · Проверки
Проверяет, состоит ли непустая строка только из букв Unicode.
Нюанс. Пробелы, дефисы и пустая строка не проходят проверку.
Официальная документация: str.isalphastr.isasciiМетод · Проверки
Проверяет, находятся ли все символы в диапазоне ASCII.
Нюанс. Пустая строка также возвращает True.
Официальная документация: str.isasciistr.isdecimalМетод · Проверки
Проверяет, состоит ли непустая строка из десятичных цифр Unicode.
Нюанс. Знак, точка и запятая не проходят эту проверку.
Официальная документация: str.isdecimalstr.isdigitМетод · Проверки
Проверяет, состоит ли непустая строка из цифр Unicode.
Нюанс. Некоторые принимаемые символы, например надстрочные цифры, нельзя напрямую преобразовать int().
Официальная документация: str.isdigitstr.isidentifierМетод · Проверки
Проверяет синтаксическую допустимость имени Python.
Нюанс. Ключевые слова также могут пройти проверку; дополнительно используйте keyword.iskeyword().
Официальная документация: str.isidentifierstr.islowerМетод · Проверки
Проверяет строчный регистр всех символов, имеющих регистр.
Нюанс. Должен присутствовать хотя бы один символ с регистром; цифры сами по себе не подходят.
Официальная документация: str.islowerstr.isnumericМетод · Проверки
Проверяет, состоит ли непустая строка из числовых символов Unicode.
Нюанс. Допускает символы дробей, поэтому это не проверка пригодности для float() или int().
Официальная документация: str.isnumericstr.isprintableМетод · Проверки
Проверяет пригодность символов для неэкранированного представления repr().
Нюанс. Пустая строка проходит проверку; наличие переноса строки приводит к False.
Официальная документация: str.isprintablestr.isspaceМетод · Проверки
Проверяет, состоит ли непустая строка только из пробельных символов.
Нюанс. Считает пробелами также табуляции и переводы строк.
Официальная документация: str.isspacestr.istitleМетод · Проверки
Проверяет заглавное начало и строчное продолжение групп букв.
Нюанс. Это алгоритм Unicode, а не проверка правил написания заголовков на конкретном языке.
Официальная документация: str.istitlestr.isupperМетод · Проверки
Проверяет верхний регистр всех символов, имеющих регистр.
Нюанс. Нужен хотя бы один символ с регистром, поэтому строка из цифр возвращает False.
Официальная документация: str.isupperstr.joinМетод · Соединение
Соединяет строки из iterable с выбранным разделителем.
Нюанс. Все элементы должны быть str; числа и bytes автоматически не преобразуются.
Официальная документация: str.joinstr.ljustМетод · Выравнивание
Дополняет строку справа до заданной ширины.
Нюанс. Короткая width не обрезает строку.
Официальная документация: str.ljuststr.lowerМетод · Регистр
Переводит символы с регистром в нижний регистр.
Нюанс. Для сравнения без учёта регистра на разных языках casefold() обычно полнее.
Официальная документация: str.lowerstr.lstripМетод · Очистка
Удаляет разрешённые символы слева.
Нюанс. chars обозначает набор отдельных символов, а не точный префикс.
Официальная документация: str.lstripstr.maketransМетод · Замены
Создаёт таблицу для посимвольного преобразования translate().
Нюанс. Вариант с двумя строками требует их одинаковой длины; None задаёт удаление символа.
Официальная документация: str.maketransstr.partitionМетод · Разделение
Делит строку по первому разделителю на три части.
Нюанс. Разделитель остаётся средней частью; при его отсутствии результат равен (строка, '', '').
Официальная документация: str.partitionstr.removeprefixМетод · Очистка
Удаляет один точный префикс, если он присутствует.
Нюанс. Не работает как lstrip(): удаляет целую последовательность только в начале.
Официальная документация: str.removeprefixstr.removesuffixМетод · Очистка
Удаляет один точный суффикс, если он присутствует.
Нюанс. Пустой суффикс оставляет строку без изменений.
Официальная документация: str.removesuffixstr.replaceМетод · Замены
Заменяет вхождения подстроки другим текстом.
Нюанс. count ограничивает число замен; в 3.15 этот аргумент также можно передать по имени.
Официальная документация: str.replacestr.rfindМетод · Поиск
Возвращает позицию последнего вхождения подстроки.
Нюанс. При отсутствии возвращает -1.
Официальная документация: str.rfindstr.rindexМетод · Поиск
Возвращает позицию последнего вхождения подстроки.
Нюанс. При отсутствии вызывает ValueError.
Официальная документация: str.rindexstr.rjustМетод · Выравнивание
Дополняет строку слева до заданной ширины.
Нюанс. Для чисел со знаком и заполнения нулями удобнее zfill().
Официальная документация: str.rjuststr.rpartitionМетод · Разделение
Делит строку по последнему разделителю на три части.
Нюанс. При отсутствии разделителя результат равен ('', '', строка).
Официальная документация: str.rpartitionstr.rsplitМетод · Разделение
Разбивает строку на части, начиная с правого края.
Нюанс. Отличие от split() заметно при ограничении maxsplit.
Официальная документация: str.rsplitstr.rstripМетод · Очистка
Удаляет разрешённые символы справа.
Нюанс. chars обозначает набор символов, а не точный суффикс.
Официальная документация: str.rstripstr.splitМетод · Разделение
Разбивает строку по разделителю или пробельным символам.
Нюанс. split() объединяет серии пробелов, а split(' ') сохраняет пустые части между отдельными пробелами.
Официальная документация: str.splitstr.splitlinesМетод · Разделение
Разбивает текст по границам строк.
Нюанс. Завершающий перевод строки не создаёт лишнюю пустую строку; keepends сохраняет окончания.
Официальная документация: str.splitlinesstr.startswithМетод · Поиск
Проверяет начало строки.
Нюанс. Поддерживает кортеж префиксов; start и end ограничивают область проверки.
Официальная документация: str.startswithstr.stripМетод · Очистка
Удаляет разрешённые символы с обоих краёв.
Нюанс. Аргумент chars является набором символов; для точного префикса или суффикса нужны другие методы.
Официальная документация: str.stripstr.swapcaseМетод · Регистр
Меняет верхний регистр на нижний и наоборот.
Нюанс. Двойное применение не всегда восстанавливает исходный Unicode-текст.
Официальная документация: str.swapcasestr.titleМетод · Регистр
Делает начало каждой группы букв заглавным.
Нюанс. Апостроф разделяет группы, поэтому английские сокращения могут оформляться неожиданно.
Официальная документация: str.titlestr.translateМетод · Замены
Преобразует символы по таблице соответствий.
Нюанс. Таблица может заменить символ несколькими символами или удалить его значением None.
Официальная документация: str.translatestr.upperМетод · Регистр
Переводит символы с регистром в верхний регистр.
Нюанс. Unicode-преобразование не гарантирует, что результат пройдёт isupper().
Официальная документация: str.upperstr.zfillМетод · Выравнивание
Дополняет строку нулями слева до заданной ширины.
Нюанс. Начальные + или - остаются перед добавленными нулями.
Официальная документация: str.zfillПримеры и материалы с собой
Архив содержит наши самостоятельные примеры, тестовые данные, ожидаемый результат и README. Указанные команды установки и фрагменты REPL отделены от скриптов, которые проверены запуском.
Сверено с официальной документацией 2026-10-12. Стандартная библиотека и сторонние пакеты различаются; ссылки на источники есть в каждой главе.


