Строковый тип данных и преобразование str
Функция str() и строковый тип в Python
Строковый тип (str)
является одним из базовых в Python. Строки представляют последовательности символов и используются для хранения текстовой информации. Встроенная функцияstr() служит для явного преобразования любого объекта в строку. Это наиболее универсальный и эффективный способ получить текстовое представление данных.
Основное решение: вызов str(object)
Функция str() принимает один обязательный аргумент - объект, который требуется преобразовать. Дополнительно можно указать кодировку и стратегию обработки ошибок (актуально для байтовых строк). Синтаксис: str(object='') или str(object, encoding, errors). Возвращает строку, представляющую переданный объект. Это самый надёжный способ, так как он гарантированно вернёт строку для любого объекта (в худшем случае - его repr).
Пример:
number = 42
text = str(number)
print(text) # '42'
print(type(text)) # Set str python (множество из строки в python)
42
Python переменная время (переменные для времени в python)
В результате число 42 преобразовано в строку «42». Аналогично работает для всех встроенных типов.
Типичная ошибка:
Неявное преобразование через конкатенацию с нестроковым типом. Например,'Число: ' + 42 вызывает TypeError. Решение - всегда использовать str(42) или f-строки.
Как преобразовать число в строку?
Для целых и дробных чисел str() возвращает их десятичную запись.
print(str(123)) # '123'
print(str(-3.14)) # '-3.14'
print(str(0xFF)) # '255' (шестнадцатеричное число сначала вычисляется)
Python типы данных время (типы данных для времени в python)
123 -3.14 255
Python объект тип (тип объекта в python)
Ошибка: str не форматирует числа - число 1e5 станет строкой «100000.0». Для научной записи используйте f-строки: f"{value:e}".
Как получить строковое представление булевых значений?
str(True) возвращает строку «True», str(False) - «False».
print(str(True) == "True") # True
print(str(1 == 2)) # 'False'вещественные значения python (вещественные значения в python)
True False
вывести тип данных python (вывод типа данных в python)
Как преобразовать список, кортеж или словарь в строку?
str() возвращает строковое представление контейнера в формате, близком к литералу Python.
data = [1, 2, 'a']
print(str(data)) # "[1, 2, 'a']"
print(str({'x': 10})) # "{'x': 10}"Python двоичные данные (работа с двоичными данными в python)
[1, 2, 'a']
{'x': 10}переменная int python какая переменная (переменная int в python - что это?)
Проблема: при больших или вложенных структурах вывод может быть нечитаем. Для красивого вывода используйте модуль pprint или json.dumps.
Как задать пользовательское строковое представление для своего класса?
Переопределите метод __str__ в классе. str(obj) автоматически вызовет его.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person({self.name}, {self.age})"
p = Person('Alice', 30)
print(str(p)) # Person(Alice, 30)комплексные числа в python (комплексные числа в python)
Person(Alice, 30)
логические значения python (логические значения в python)
Ошибка: если __str__ не определён, str(obj) вернёт результат __repr__ (обычно неинформативный). Всегда реализуйте оба метода для пользовательской логики.
Как отличить str от repr и когда применять каждый?
str() предназначен для чтения человеком, repr() - для однозначного восстановления объекта (часто совпадает с кодом создания).
import datetime
today = datetime.date(2025, 3, 14)
print(str(today)) # 2025-03-14
print(repr(today)) # datetime.date(2025, 3, 14)длина переменной python (длина числа и переменной в python)
2025-03-14 datetime.date(2025, 3, 14)
определение объекта python (определение типа объекта в python)
Используйте str() для вывода пользователю, repr() для отладки.
Как преобразовать байтовую строку (bytes) в обычную строку?
Передайте байты как первый аргумент и укажите кодировку (обычно 'utf-8').
b = b'hello'
s = str(b, encoding='utf-8')
print(s) # hello
print(type(s)) # определение типа данных python (определение типов данных в python)
hello
Python максимальное целое число (максимальное целое число в python)
Ошибка: без указания encoding str(b) вернёт строковое представление байтового литерала (например, "b'hello'"). Если байты содержат не ASCII символы, возможен UnicodeDecodeError. Укажите errors='ignore' или используйте метод .decode().
Как преобразовать None в строку?
str(None) возвращает строку «None».
val = None
if str(val) == 'None':
print('Строка None') # Строка NoneList values python (список значений словаря в python)
Строка None
Расширенные примеры использования функции str()
1. Параметры encoding и errors для байтов
При преобразовании байтов в строку можно задать стратегию обработки ошибок.
b = b'\xff\xfe'
# без errors – ошибка (недопустимая последовательность)
try:
s = str(b, encoding='utf-8', errors='strict')
except UnicodeDecodeError as e:
print('Ошибка:', e)
# с errors='replace' – замена недопустимых символов на '?'
s = str(b, encoding='utf-8', errors='replace')
print('replace:', repr(s))
# с errors='ignore' – пропуск недопустимых символов
s = str(b, encoding='utf-8', errors='ignore')
print('ignore:', repr(s))
Ошибка: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte replace: '??' ignore: ''
2. Переопределение __str__ и __repr__ в пользовательском классе
Рекомендуется реализовывать оба метода для корректной работы str() и repr().
class Complex:
def __init__(self, real, imag):
self.real = real
self.imag = imag
def __repr__(self):
return f"Complex({self.real}, {self.imag})"
def __str__(self):
if self.imag >= 0:
return f"{self.real}+{self.imag}i"
else:
return f"{self.real}{self.imag}i"
c = Complex(3, -4)
print('str:', str(c)) # 3-4i
print('repr:', repr(c)) # Complex(3, -4)
str: 3-4i repr: Complex(3, -4)
3. str() с нестандартными типами: frozenset и complex
# frozenset
fs = frozenset([1, 2, 3])
print(str(fs)) # frozenset({1, 2, 3})
# complex
z = 1 + 2j
print(str(z)) # (1+2j)
frozenset({1, 2, 3})
(1+2j)
4. Использование str() в f-строках (неявный вызов)
F-строки внутри фигурных скобок автоматически вызывают str() для преобразования переменных.
value = 3.1415926
print(f"Число Pi: {value}") # эквивалентно str(value)
print(f"С округлением: {value:.2f}") # дополнительное форматирование
Число Pi: 3.1415926 С округлением: 3.14
5. str() для исключений и пользовательских ошибок
Исключения могут быть преобразованы в строку для логирования.
try:
1/0
except ZeroDivisionError as e:
log_message = 'Ошибка: ' + str(e)
print(log_message) # Ошибка: division by zero
Ошибка: division by zero
6. Проблема рекурсии при переопределении __str__
Не вызывайте str(self) внутри __str__ напрямую – это приведёт к бесконечной рекурсии.
class Bad:
def __str__(self):
return str(self) # Рекурсия!
try:
print(Bad())
except RecursionError:
print('RecursionError!')
RecursionError!
Правильное решение – использовать форматирование с явными атрибутами:
class Good:
def __init__(self, data):
self.data = data
def __str__(self):
return f"Good({self.data})" # без str(self)
7. str() для None и специальных объектов
print(str(None)) # None
print(str(...)) # Ellipsis
print(str(NotImplemented)) # NotImplemented
None Ellipsis NotImplemented
8. Преобразование строки в строку (ничего не меняет)
str() от строки возвращает её копию.
s = "hello"
print(str(s) is s) # True – один и тот же объект (интернирование возможно)
True