Str: примеры (PYTHON)

Руководство по использованию функции str в Python
Раздел: Встроенные функции, Преобразование типов
str(object): str

Основы функции str

Функция str() в Python предназначена для создания строкового представления объекта. Это одна из встроенных функций, которая часто используется для преобразования данных различных типов в строки, что необходимо для конкатенации, форматирования вывода или сериализации.

Функция вызывается с одним обязательным аргументом – объектом, который требуется преобразовать. Она также принимает два необязательных именованных аргумента: encoding и errors. Эти параметры актуальны только при преобразовании объектов типа bytes или bytearray в строку.

  • object (обязательный): Любой объект Python. Если объект не указан, возвращается пустая строка.
  • encoding (необязательный): Кодировка, используемая для декодирования байтовых объектов (например, 'utf-8', 'ascii'). По умолчанию используется кодировка системы.
  • errors (необязательный): Способ обработки ошибок декодирования. Возможные значения: 'strict' (вызывает UnicodeError), 'ignore', 'replace', 'backslashreplace', 'xmlcharrefreplace' и другие.

Возвращаемое значение – строка (str). Если объект является строкой, возвращается та же самая строка. Для других типов данных функция вызывает метод __str__() объекта, а если его нет – метод __repr__().

Базовые примеры использования

Преобразование различных типов данных в строку.

print(str(123))
'123'
print(str(45.67))
'45.67'
print(str([1, 2, 3]))
'[1, 2, 3]'

Использование с байтами и указанием параметров.

byte_data = b'Hello \xd0\x9c\xd0\xb8\xd1\x80'
print(str(byte_data, encoding='utf-8', errors='replace'))
'Hello Мир'
print(str(b'Test \xff', encoding='utf-8', errors='ignore'))
'Test '

Похожие функции в Python

  • repr(): Возвращает строку, содержащую печатаемое представление объекта. Часто эта строка выглядит как валидный код Python для воссоздания объекта. Используется для отладки.
    s = 'текст'
    print(repr(s))
    "'текст'"
  • format() и f-строки: Предназначены для форматированного вывода, но также преобразуют объекты в строки в рамках заданного формата.
    value = 10/3
    print(f'{value:.2f}')
    '3.33'
  • ascii(): Возвращает строку, содержащую представление объекта, в котором все не-ASCII символы экранированы. Полезна для безопасного вывода.

Функцию str() предпочтительнее использовать для общего преобразования в читаемую строку, а repr() – для отладочной информации.

Аналоги функции в других языках

  • PHP: (string) или функция strval(). Преобразование происходит в контексте строки.
    echo strval(123); // '123'
    echo (string) [1,2]; // 'Array' (не подробное представление)
  • JavaScript: String() или toString(). Часто используется конкатенация с пустой строкой.
    String(123); // '123'
    (456).toString(); // '456'
    '' + true; // 'true'
  • Java: String.valueOf() или метод toString() у объектов.
    String.valueOf(123); // "123"
    Integer.toString(456); // "456"
  • SQL: Функция CAST или CONVERT.
    -- PostgreSQL
    SELECT CAST(123 AS TEXT); -- '123'
  • C#: ToString() – метод, унаследованный всеми типами от Object.
    123.ToString(); // "123"
  • Lua: tostring() – глобальная функция.
    tostring(10) -- '10'
  • Golang: Пакет strconv, например, strconv.Itoa() для целых чисел.
    s := strconv.Itoa(123) // "123"
  • Kotlin: toString() – метод любого объекта.
    123.toString() // "123"

В отличие от Python, во многих языках преобразование в строку реализовано как метод объекта, а не как глобальная функция.

Распространенные ошибки

  • Попытка преобразования объекта bytes без указания кодировки (в Python 3).
    str(b'hello')
    "b'hello'" (Возвращается repr-представление, а не декодированная строка)
  • Использование неверной кодировки для декодирования байтов, что приводит к ошибке UnicodeDecodeError.
    str(b'\xff', encoding='ascii')
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xff...
  • Рекурсивный вызов __str__ в пользовательском классе.
    class A:
    def __str__(self):
    return str(self) # Рекурсия!
    print(A())
    RecursionError: maximum recursion depth exceeded
  • Ожидание детального строкового представления для контейнеров с не-ascii символами при неявном вызове (например, в print списка). Функция print для элементов списка использует repr.
    items = ['кошка', 'собака']
    print(items) # Используется repr для элементов
    ['кошка', 'собака']

Изменения в новых версиях Python

  • В Python 3 функция str() стала использоваться исключительно для текстовых строк (тип unicode), в отличие от Python 2, где str представлял байтовые строки. Для работы с байтами были введены типы bytes и bytearray.
  • Начиная с Python 3.4, у объектов pathlib.Path метод __str__() возвращает строковое представление пути как обычную строку, что делает использование str(path) более удобным.
  • В Python 3.7 и выше улучшена производительность преобразования чисел с плавающей точкой в строку.
  • В Python 3.11 были внесены внутренние оптимизации для уменьшения накладных расходов при вызове встроенных функций, включая str().

Расширенные примеры и нюансы

Работа с пользовательскими классами. Приоритет имеет метод __str__.

Пример python
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
return f'"{self.title}" by {self.author}'
def __repr__(self):
return f'Book({self.title!r}, {self.author!r})'

book = Book('1984', 'G. Orwell')
print(str(book))
print(repr(book))
"1984" by G. Orwell
Book('1984', 'G. Orwell')

Использование параметра errors при декодировании.

Пример python
data = b'Price: 100\xe2\x82\xac'  # Евро символ в UTF-8
print(str(data, encoding='ascii', errors='replace'))
print(str(data, encoding='ascii', errors='backslashreplace'))
print(str(data, encoding='ascii', errors='xmlcharrefreplace'))
Price: 100���
Price: 100\xe2\x82\xac
Price: 100€

Вызов функции без аргументов возвращает пустую строку. Это полезно для инициализации.

Пример python
empty_string = str()
print(repr(empty_string))
''

Преобразование логических значений.

Пример python
print(str(True), str(False), sep=', ')
True, False

Неявный вызов str в f-строках и методе format.

Пример python
from datetime import datetime
now = datetime.now()
print(f'Сейчас: {now}') # Автоматически вызывается str(now)
Сейчас: 2023-10-26 14:30:00.123456

Разница между str и repr для строк с управляющими символами.

Пример python
s = 'Line1\nLine2'
print(str(s)) # Интерпретирует символ новой строки
print(repr(s)) # Показывает escape-последовательность
Line1
Line2
'Line1\nLine2'

питон str function comments

En
Str Convert to string