Текст, но с методами
Строка в Python — это последовательность символов, и ты будешь использовать строки чаще, чем любой другой тип. Любое имя, метка, сообщение, URL, путь к файлу и ответ от API рано или поздно живёт в строке.
Создать строку можно с помощью кавычек — одинарных, двойных или тройных:
Одинарные и двойные кавычки взаимозаменяемы. Используй те, которые избавляют от экранирования. "don't" выглядит чисто; 'don\'t' требует обратной косой.
Строки неизменяемы. Как только строка существует, изменить её символ на месте нельзя. Любая операция, которая выглядит как изменение строки, на самом деле возвращает новую строку. Именно поэтому ты будешь писать text = text.upper(), а не просто text.upper() — без присваивания новая строка в верхнем регистре просто потерялась бы.
Склейка и повторение
Два оператора делают большую часть соединительной работы:
+ склеивает строки. * повторяет строку. Оба возвращают новую строку.
Соединять много кусков через + быстро становится уродливо. Когда смешиваешь значения разных типов в одном сообщении, бери f-строки — про них следующий раздел.
f-строки: то, чем ты обычно будешь форматировать
Поставь f перед открывающей кавычкой, и строка превратится в шаблон. Всё, что внутри {...}, заменяется значением этого выражения:
Внутри фигурных скобок можно писать любое выражение — переменные, арифметику, вызовы методов, вызовы функций. Только не перегибай: если тянет впихнуть в {...} вычисление на три строки, сначала посчитай результат в именованную переменную.
f-строки также поддерживают спецификаторы формата после двоеточия — они управляют форматированием чисел, выравниванием и заполнением:
Эти спецификации — те же самые, что использует str.format(), и их стоит разок пробежать глазами, когда освоишься с базой. Для кода первого дня они не нужны.
Срезы: взять кусочек
По строкам можно обращаться как по последовательностям. У каждого символа есть позиция, начиная с нуля, и ты можешь взять один символ или диапазон:
Шаблон [start:stop:step] встречается и у списков, и у других последовательностей, так что несколько минут, потраченных на его освоение, окупятся везде.
Два момента стоит подчеркнуть:
- Индекс
stopне включается:word[0:2]берёт индексы 0 и 1, но не 2. - Отрицательные индексы отсчитываются с конца:
-1— последний символ,-2— предпоследний и так далее.
Как развернуть строку
У строк нет метода .reverse() — они неизменяемые, — но срез с шагом -1 делает эту работу в одну строчку:
word[::-1] читается как «от начала до конца, шагом -1». Результат — совершенно новая строка; исходная остаётся нетронутой. Если нужно пройти по символам в обратном порядке без создания новой строки, reversed(word) возвращает ленивый итератор.
Как узнать длину строки
len(text) возвращает количество символов:
Имей в виду, что len считает кодовые точки Unicode, а не байты. len("café") равно 4, а не 5, даже если UTF-8-кодировка занимает больше байт, — и обычно это именно то, что тебе нужно.
Как проверить, содержит ли строка подстроку
Оператор in — идиоматичная проверка, и читается он как английский:
Для проверки без учёта регистра сначала приведи обе стороны к одному виду:
Если нужна позиция, а не просто да/нет, используй .find() — он возвращает индекс или -1, если подстроки нет.
Распространённые методы строк
У строк десятки методов. Вот та горстка, к которой будешь обращаться постоянно:
Разбиение и склейка:
.split(separator) превращает строку в список. separator.join(list_of_strings) склеивает её обратно. Эти два метода берут на себя непропорционально большую долю реальной работы со строками.
Ещё одна полезная пара:
Это парсер однострочной строки конфига, написанный в три строчки. Маленькие строки, большой эффект.
Проверяем, что внутри
Несколько методов возвращают булевы значения — удобно для условий в if:
Используй их умеренно — они не всегда корректно обрабатывают Unicode-нюансы. Для всего, что выходит за пределы ASCII, лучше полагаться на модуль re или unicodedata.
Экранирование спецсимволов
Некоторые символы требуют обратной косой, чтобы попасть в строку:
Если пишешь путь Windows или регулярное выражение, пригодятся «сырые» строки. Поставь r перед кавычкой — и обратные косые перестают быть служебными:
Строки повсюду, так что делай их читаемыми
Три привычки, которые не дают коду с кучей строк превратиться в кашу:
- Используй f-строки для интерполяции. Не сшивай
+разные типы. - Не забывай присваивать при «изменении».
text = text.strip(), а не простоtext.strip(). - Бери
.split()и.join()вместо ручных циклов для парсинга или сборки текста. Они быстрее, понятнее и с ними сложнее ошибиться.
Дальше: f-строки подробно — тот самый инструмент форматирования, который ты уже видел, плюс спецификации для чисел и дат, ради которых его и стоит освоить.
Часто задаваемые вопросы
Что такое f-строка в Python?
f-строка — это строковый литерал с префиксом f, в котором всё, что заключено в {...}, заменяется значением соответствующего выражения. Пример: f"Привет, {name}!" подставляет текущее значение name в строку во время выполнения.
Как развернуть строку в Python?
Используй срез с шагом -1: reversed_text = original[::-1]. Это вернёт новую строку с теми же символами в обратном порядке. Исходная строка останется нетронутой, потому что строки в Python неизменяемые.
Как разбить строку в Python?
Вызови .split() у строки. Без аргументов метод разбивает по любым пробельным символам: "a b c".split() вернёт ['a', 'b', 'c']. Можно передать конкретный разделитель: "a,b,c".split(",") вернёт ['a', 'b', 'c'].
Изменяемы ли строки в Python?
Нет. Строки неизменяемые — как только строка создана, поменять её символы на месте нельзя. Каждый метод, который «меняет» строку, на самом деле возвращает новую. Поэтому ты и видишь шаблон text = text.strip() — переменной присваивается новое значение.
Как склеить строки в Python?
Используй + для соединения двух строк: "hello" + " " + "world". Чтобы подставить значение внутрь предложения, лучше взять f-строку: f"Привет, {name}". Для склейки множества кусков из списка используй separator.join(pieces) — это быстрее и читается лучше, чем цепочка из +.
Как узнать длину строки в Python?
Вызови встроенную функцию len(text). Она возвращает количество символов (кодовых точек Unicode), поэтому len("café") равно 4. Чтобы получить длину в байтах, сначала закодируй: len(text.encode("utf-8")).