Способы преобразования переменных в строку в языке Python

Раздел: Основы Python -> Преобразование данных

Основы преобразования в строку

Как преобразовать любой объект в удобочитаемую строку?

Наиболее универсальный и эффективный способ - встроенная функция str(). Она принимает один аргумент (объект) и возвращает его строковое представление. str() работает с числами, булевыми значениями, списками, словарями, None и большинством встроенных типов.


число = 123
результат = str(число)
print(результат)          # '123'
print(type(результат))    # <class 'str'>

булево = True
print(str(булево))        # 'True'

список = [1, 2, 3]
print(str(список))        # "[1, 2, 3]"

преобразование в текст python (преобразование в строку в python)

Типичные ошибки:

  • Попытка конкатенации строки с числом без явного преобразования вызывает TypeError:

возраст = 25
текст = "Мне " + возраст + " лет"  # Ошибка
текст = "Мне " + str(возраст) + " лет"  # Правильно

Python список цифр в число (преобразование списка цифр в число в python)

  • Для объектов пользовательских классов str() возвращает техническое описание (тип и адрес), если не определён метод __str__.

Как получить точное представление объекта для отладки?

Функция repr() возвращает строку, которую можно (в идеале) использовать для воссоздания объекта. Для строк repr() добавляет кавычки, для чисел - без изменений. Различие становится заметным при сравнении:


s = "привет"
print(str(s))    # привет
print(repr(s))   # 'привет'

x = 42
print(str(x))    # 42
print(repr(x))   # 42

преобразование данных python (преобразование данных в python)

Проблема: repr() для встроенных типов, таких как строки, включает лишние кавычки, что может быть неудобно для конечного пользователя.

Как вставить переменные в строку без склеивания?

Современный подход - f-строки. Перед строкой ставится буква f, а внутри фигурных скобок указываются выражения:


имя = "Анна"
возраст = 30
сообщение = f"{имя} через 5 лет будет {возраст + 5} лет"
print(сообщение)  # Анна через 5 лет будет 35 лет

Python функции преобразования (функции преобразования в python)

Ошибка: Не работает в старых версиях Python (до 3.6). Для совместимости используют .format().

Традиционный метод .format():


print("{} через 5 лет будет {} лет".format(имя, возраст+5))

List в словарь python (преобразование списка в словарь в python)

Как объединить элементы списка в одну строку?

Метод str.join() принимает итерируемый объект из строк и соединяет их через заданный разделитель. Если элементы не строки, их предварительно преобразуют функцией str():


числа = [1, 2, 3]
строка = ", ".join(str(x) for x in числа)
print(строка)  # "1, 2, 3"

Ошибка: TypeError, если среди элементов есть не строки (например, числа).

Как преобразовать байтовую строку в текст?

Байтовый объект (тип bytes) содержит последовательность байт. Для получения строки вызывается метод .decode() с указанием кодировки (по умолчанию utf-8):


b = b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
текст = b.decode('utf-8')
print(текст)  # Привет

Распространённая ошибка: UnicodeDecodeError при несовпадении кодировок. Решение - указать правильную кодировку или указать параметр errors='replace' для замены непонятых байтов.

Как определить строковое представление для собственного класса?

В классе можно переопределить методы __str__ (для пользователя) и __repr__ (для разработчика).


class Точка:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __str__(self):
        return f"Точка ({self.x}, {self.y})"
    def __repr__(self):
        return f"Точка({self.x}, {self.y})"

p = Точка(3, 4)
print(str(p))    # Точка (3, 4)
print(repr(p))   # Точка(3, 4)

Рекурсивный вызов: если __str__ внутри себя вызывает str(self), а не использует f-строку с атрибутами, возникнет RecursionError.

Дополнительные примеры преобразования в строку

Функция str() с нестандартными объектами

Преобразование объекта datetime или Decimal:

Пример

from datetime import datetime
from decimal import Decimal

сейчас = datetime.now()
print(str(сейчас))  # 2025-03-27 12:30:45.123456

цена = Decimal('19.99')
print(str(цена) + " руб.")  # 19.99 руб.
2025-03-27 12:30:45.123456
19.99 руб.

Использование repr() для отладки

repr() часто применяется в логах, так как показывает тип строк (в кавычках). Пример с пользовательским классом без __repr__:

Пример

class User:
    def __init__(self, name):
        self.name = name

u = User("Иван")
print(repr(u))  # <__main__.User object at 0x7f...>
# После добавления __repr__:
class User:
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return f"User('{self.name}')"

u2 = User("Мария")
print(repr(u2))  # User('Мария')
<__main__.User object at 0x7f...>
User('Мария')

Форматирование с f-строками: дополнительные возможности

Выравнивание, округление чисел, работа с датами:

Пример

pi = 3.1415926535
print(f"{pi:.2f}")        # 3.14
print(f"{pi:10.2f}")      # '      3.14' (10 символов, выравнивание вправо)
print(f"{pi:<10.2f}")     # '3.14      ' (выравнивание влево)

import datetime
d = datetime.datetime.now()
print(f"Дата: {d:%Y-%m-%d}")  # Дата: 2025-03-27
3.14
      3.14
3.14      
Дата: 2025-03-27

Метод .format() с именованными и позиционными аргументами

Пример

шаблон = "{name} заработал {salary:.2f} руб."
print(шаблон.format(name="Алексей", salary=25000.5))

# Нумерация позиций:
print("{0} -> {1} -> {0}".format("один", "два"))  # один -> два -> один
Алексей заработал 25000.50 руб.
один -> два -> один

Объединение с join и генераторное выражение

Пример

числа = range(1, 11)
результат = ", ".join(str(x) for x in числа if x % 2 == 0)
print("Чётные: " + результат)  # Чётные: 2, 4, 6, 8, 10
Чётные: 2, 4, 6, 8, 10

Преобразование байтов с обработкой ошибок кодировки

Пример

b = b'\xff\xfe\x41\x00'  # Некорректные байты для utf-8
попытка = b.decode('utf-8', errors='replace')
print(попытка)  # ���A\x00 (нечитаемый, но без исключения)

# Использование правильной кодировки:
b2 = b'\xc3\xa9'  # символ 'é' в utf-8
строка = b2.decode('utf-8')
print(строка)  # é
���A (символы замены)
é

Определение __str__ и __repr__ одновременно

Пример

class Дробь:
    def __init__(self, num, den):
        self.num = num
        self.den = den
    def __str__(self):
        return f"{self.num}/{self.den}"
    def __repr__(self):
        return f"Дробь({self.num}, {self.den})"

f = Дробь(3, 4)
print(str(f))    # 3/4
print(repr(f))   # Дробь(3, 4)
3/4
Дробь(3, 4)

Преобразование сложных вложенных структур

Использование json.dumps() для форматирования в JSON:

Пример

import json

данные = {
    "имя": "Елена",
    "баллы": [95, 87, 92],
    "портфель": None
}
строка_json = json.dumps(данные, ensure_ascii=False, indent=2)
print(строка_json)
{
  "имя": "Елена",
  "баллы": [
    95,
    87,
    92
  ],
  "портфель": null
}

Этот способ удобен для сериализации данных перед записью в файл.

Преобразование в строку в Python - comments

En
преобразование в текст python (python)