Тип 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

Строковые типы в Python - comments

En
Python string types (python)