Что делать? 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: не все аргументы, преобразованные во время форматирования строки
  • Преобразование строки Unicode в строку в Python (содержащий дополнительные символы)
  • Преобразование списка строк в массиве numpy более быстрым способом
  • Преобразование кодовых точек Unicode в символ Unicode с использованием Python 3.3.1
  • Преодоление MemoryError / Slow Runtime в задаче Ashton String
  • Декодирование Unicode в Python
  • Добавление строк из объекта json в состояние вместе эффективно?
  • Python: удаление определенного символа (u "\ u2610") из строки
  • Python - лучший язык программирования в мире.