Тип str в Python: подробное руководство по строкам
Строковые типы в Python
В Python строки представлены неизменяемым типом str. Они хранят последовательности символов Unicode и могут быть созданы разными способами. Ниже рассмотрены основные приёмы, их особенности и типичные ошибки.
Основной способ: кавычки
Самый распространённый вариант - заключить текст в одинарные ('...') или двойные ("...") кавычки. Выбор не влияет на работу, но позволяет без экранирования вставлять кавычки другого типа внутрь строки.
name = 'Alice'
message = "Alice's book" # двойные кавычки позволяют использовать апострофType class python (класс type в python)
Если внутри строки требуется использовать тот же тип кавычки - добавляют обратную косую черту (\).
quote = 'He said \'Hello\''Python string types (строковые типы в python)
Почему при использовании кавычек может возникнуть SyntaxError?
Ошибка возникает при незакрытой кавычке или неверном экранировании. Например, 'It\'s fine' - корректно, а 'It's fine' - ошибка. Решение: всегда проверять парность кавычек или использовать другой тип кавычек.
Цель использования: создание коротких однострочных строк без escape-последовательностей, если они не нужны.
Как создать многострочную строку?
Для многострочного текста применяют тройные кавычки: '''...''' или """...""". Внутри можно свободно переносить строки и использовать одинарные/двойные кавычки.
multiline = '''Первая строка
Вторая строка
Третья строка'''Python type str (тип str в python)
Ошибка: лишние пробелы в начале строк при форматировании кода. Для удаления отступов используют inspect.cleandoc() или выравнивают код влево.
Как избежать обработки escape-последовательностей?
Префикс r (raw-строка) отключает интерпретацию обратной косой черты. Полезно для регулярных выражений и путей Windows.
path = r'C:\Users\Name\Documents'Python object type (тип объекта в python)
Внутри raw-строки обратная косая черта остаётся как есть, но экранировать кавычку через \' уже нельзя - это вызовет ошибку. Единственный способ включить саму обратную косую черту - продублировать её (но только если не перед кавычкой).
Почему в raw-строке не получается поставить кавычку?
Например, r'It\'s' - SyntaxError. Решение: использовать разные типы кавычек (r"It's") или экранировать не через \, а заменить строку на обычную с экранированием.
Как вставить переменные в строку (интерполяция)?
Для подстановки значений используют f-строки (Python 3.6+): перед кавычками ставят f или F, а внутри фигурные скобки с выражением.
name = 'Alice'
age = 30
text = f'{name} is {age} years old.'Python 3 types (типы данных в python 3)
Внутри фигурных скобок можно вызывать методы, арифметические операции, даже лямбда-функции (но для сложных выражений лучше вынести в переменную).
result = f'{2 * 3 + 1}' # '7'Python float types (типы с плавающей запятой в python)
Почему f-строка не работает с фигурными скобками внутри?
Чтобы вывести сами фигурные скобки, их удваивают: f'{{ и }}' даёт строку '{ и }'.
Как отформатировать строку с помощью .format()?
Старый способ - метод str.format(). В строке указывают плейсхолдеры {} и передают аргументы. Можно задавать порядок, имена или спецификаторы выравнивания и числовых форматов.
template = '{0} имеет {1} лет'.format('Alice', 30)
# или с именованными: '{name} имеет {age} лет'.format(name='Alice', age=30)Python int types (целочисленные типы в python)
Почему .format() вызывает KeyError или IndexError?
Если имя ключа не совпадает или индекс выходит за пределы списка аргументов. Решение: проверить соответствие плейсхолдеров и переданных значений.
Как склеивать строки (конкатенация)?
Оператор + объединяет несколько строк в одну. Для повторения используют *. Не рекомендуется склеивать много строк через + - лучше применить join() или f-строки.
s = 'Hello' + ' ' + 'World' # 'Hello World'
rep = 'Ha' * 3 # 'HaHaHa'
Почему конкатенация в цикле замедляет программу?
Каждое сложение создаёт новый объект строки, что приводит к квадратичной сложности. Решение: собирать части в список и затем выполнить ''.join(list).
Как получить строку из нестрокового объекта?
Функция str() преобразует число, список и другие объекты в строковое представление.
num = 42
s = str(num) # '42'
Почему при преобразовании списка получаются лишние символы?
str([1,2,3]) даёт строку '[1, 2, 3]' с квадратными скобками. Если нужно только содержимое, используют ','.join(map(str, lst)).
Расширенные примеры работы со строками
Ниже приведены более подробные примеры, включая редкие приёмы и их результаты.
1. Разные виды кавычек и экранирование
# Одинарные внутри двойных и наоборот
s1 = "It's a book"
s2 = 'He said "Hello"'
print(s1)
print(s2)
# Экранирование обратной косой черты
s3 = 'C:\\Users\\Name'
print(s3)
It's a book He said "Hello" C:\Users\Name
2. Тройные кавычки с сохранением форматирования
triple = """{
"name": "Alice",
"age": 30
}"""
print(triple)
{
"name": "Alice",
"age": 30
}
3. Raw-строки для регулярных выражений
import re
pattern = r'\d{3}-\d{4}'
text = 'My phone: 123-4567'
if re.search(pattern, text):
print('Found')
else:
print('Not found')
Found
4. f-строки с вычислениями и методами
name = 'Alice'
print(f"{name.upper()} has {len(name)} letters.")
print(f"{2 ** 10} = 1024")
ALICE has 5 letters. 1024 = 1024
5. Форматирование чисел в .format() и f-строках
pi = 3.14159265
# Два знака после запятой
print(f"pi = {pi:.2f}")
# Выравнивание по ширине 10 символов
print("{:>10}".format("right"))
# Заполнение нулями
print(f"{42:05d}")
pi = 3.14
right
00042
6. Конкатенация через join() для больших строк
words = ['Python', 'is', 'awesome']
# Склейка с пробелом
sentence = ' '.join(words)
print(sentence)
# Склейка с запятой и пробелом
csv = ', '.join(words)
print(csv)
Python is awesome Python, is, awesome
7. Неизменяемость строк и создание новой строки
s = 'hello'
# Попытка изменить символ приведёт к ошибке
# s[0] = 'H' # TypeError
# Правильный способ - создать новую строку
s_new = 'H' + s[1:]
print(s_new) # 'Hello'
Hello
8. Преобразование байтов в строку и обратно
# Текст в байты (кодирование)
text = 'Привет'
bytes_data = text.encode('utf-8')
print(bytes_data)
# Байты обратно в строку (декодирование)
decoded = bytes_data.decode('utf-8')
print(decoded)
b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' Привет
9. Срезы строк и работа с подстроками
text = 'Python programming'
# Первые 6 символов
print(text[:6])
# Последние 11 символов
print(text[-11:])
# Каждый второй символ
print(text[::2])
Python programming Pto rgamn
10. Проверка содержимого и методы
s = 'Hello World'
print(s.startswith('Hello')) # True
print(s.endswith('World')) # True
print(s.find('lo')) # 3
print(s.replace('World', 'Python')) # 'Hello Python'
print(' '.join(s.split())) # 'Hello World' (удаление лишних пробелов)
True True 3 Hello Python Hello World