Что делать? R в str () и repr ()?

Согласно документации Python 2.7.12 :

!s (применить str() ) и !r (применить repr() ) можно использовать для преобразования значения до его форматирования.

 >>> import math >>> print 'The value of PI is approximately {}.'.format(math.pi) The value of PI is approximately 3.14159265359. >>> print 'The value of PI is approximately {!r}.'.format(math.pi) The value of PI is approximately 3.141592653589793. 

Интересно, что преобразованная величина является результатом функции repr() , а не str() .

 >>> str(math.pi) '3.14159265359' >>> repr(math.pi) '3.141592653589793' 

Итак, что означает «преобразовать значение»? Сделать его менее удобочитаемым для человека?

One Solution collect form web for “Что делать? R в str () и repr ()?”

Чтобы форматировать что-то в строке, сначала необходимо создать строковое представление этого. «преобразовать значение» в основном говорит о том, как должно строиться строковое представление. В python есть два довольно естественных выбора, чтобы получить строковое представление чего-то … str и repr . str как правило, немного дружелюбнее к человеку, repr как правило, более точен. Возможно, официальная документация – лучшее место для поиска разницы:

object.__repr__(self)

  • Вызывается встроенной функцией repr() для вычисления «официального» строкового представления объекта. Если это вообще возможно, это должно выглядеть как действительное выражение Python, которое может быть использовано для воссоздания объекта с тем же значением (с учетом соответствующей среды). Если это невозможно, необходимо вернуть строку формы <...some useful description...> . Возвращаемое значение должно быть строковым. Если класс определяет __repr__() но не __str__() , то __repr__() также используется, когда требуется «неформальное» строковое представление экземпляров этого класса.

  • Обычно это используется для отладки, поэтому важно, чтобы представление было информативным и недвусмысленным.

object.__str__(self)

  • Вызывается str (объект) и встроенными функциями format () и print () для вычисления «неформального» или красиво печатаемого строкового представления объекта. Возвращаемое значение должно быть строковым.

  • Этот метод отличается от object.__repr__() тем, что нет ожидаемого того, что __str__() возвращает допустимое выражение Python: может использоваться более удобное или сжатое представление.

  • Реализация по умолчанию, определенная встроенным объектом типа, вызывает object.__repr__() .

В str.format !s выбирает использовать str для форматирования объекта, тогда как !r выбирает repr для форматирования значения.

Разницу можно легко увидеть со строками (поскольку в качестве строки для строки будут использованы внешние кавычки).

 >>> 'foo {}'.format('bar') 'foo bar' >>> 'foo {!r}'.format('bar') "foo 'bar'" 

Какая разница между этими двумя методами действительно зависит от форматируемых объектов. Для многих объектов (например, тех, которые не переопределяют метод __str__ ) не будет различий в форматированном выходе.

  • Определение того, сколько раз подстрока встречается в строке в Python
  • Потенциальные исключения с использованием встроенного типа str () в Python
  • Строка Python с пространством и без пространства в конце и неизменяемость
  • Почему «выживают» после.
  • Декодирование с двойной кодировкой utf8 в Python
  • cvv поведение читателя с None и пустой строкой
  • преобразование строки unicode в python
  • Что такое чистый способ преобразования процентной ставки строки в float?
  • Форматирование строки Python - старое `%` vs new `str.format`
  • Манипулирование файлами json python
  • в Python, Как преобразовать строку в объект даты и получить год, месяц и день отдельно?
  • Python - лучший язык программирования в мире.