Подтвердить что ты не робот

Что значение% r в python

какой смысл %r в следующем утверждении?

print '%r' % (1)

Я думаю, что слышал о %s, %d и %f, но никогда не слышал об этом.

4b9b3361

Ответ 1

Фон:

В Python есть две встроенные функции для превращения объекта в строку: str против repr. str должен быть дружественной, удобочитаемой для людей строкой. repr должен содержать подробную информацию о содержимом объекта (иногда они возвращают то же самое, что и для целых чисел). По соглашению, если есть выражение Python, которое будет eval для другого объекта, который ==, repr вернет такое выражение, например.

>>> print repr('hi')
'hi'  # notice the quotes here as opposed to...
>>> print str('hi')
hi

Если возврат выражения не имеет смысла для объекта, repr должен возвращать строку, окруженную < и > символы, например. <blah>.

Чтобы ответить на ваш оригинальный вопрос:

%sstr
%rrepr

Кроме того:

Вы можете контролировать способ преобразования экземпляров ваших собственных классов в строки, __str__ и __repr__.

class Foo:

  def __init__(self, foo):
    self.foo = foo

  def __eq__(self, other):
    """Implements ==."""
    return self.foo == other.foo

  def __repr__(self):
    # if you eval the return value of this function,
    # you'll get another Foo instance that == to self
    return "Foo(%r)" % self.foo

Ответ 2

Он вызывает repr() объекта и вставляет результирующую строку.

Ответ 3

Он печатает замену как строку с помощью repr().

Ответ 4

Добавление к ответам, приведенным выше, '%r' может быть полезно в сценарии, где у вас есть список с разнородным типом данных. Пусть, скажем, a list = [1, 'apple' , 2 , 'r','banana'] Очевидно, что в этом случае использование '%d' или '%s' приведет к ошибке. Вместо этого мы можем использовать '%r' для печати всех этих значений.

Ответ 5

Разница между %r и %s состоит в том, что %r вызывает метод repr() а %s вызывает метод str(). Оба из них являются встроенными функциями Python.

Метод repr() возвращает печатаемое представление данного объекта. Метод str() возвращает "неформальное" или хорошо отображаемое представление данного объекта.

Проще говоря, метод str() выполняет вывод результата так, как конечный пользователь хотел бы видеть:

name = "Adam"
str(name)
Out[1]: 'Adam'

Метод repr() напечатает или покажет, как на самом деле выглядит объект:

name = "Adam"
repr(name)
Out[1]: "'Adam'"

Ответ 6

%s вызывает метод __str()__ для выбранного объекта и заменяет собой возвращаемое значение,

%r вызывает метод __repr()__ выбранного объекта и заменяет себя возвращаемым значением.

Ответ 7

%s <=> str
%r <=> repr

%r вызывает repr() для объекта и вставляет полученную строку, возвращаемую __repr__.

Строка, возвращаемая __repr__, должна быть недвусмысленной и, если возможно, соответствовать исходному коду, необходимому для воссоздания представляемого объекта.

Быстрый пример:

class Foo:

    def __init__(self, foo):
        self.foo = foo


    def __repr__(self):
        return 'Foo(%r)' % self.foo

    def __str__(self):
        return self.foo


test = Foo('Text')

Итак,

in[1]: test
Out[1]: Foo('Text')


in[2]: str(test)
Out[2]: 'Text'

Ответ 8

См. Операции форматирования строк в документах. Обратите внимание, что% s и% d и т.д. Могут работать по-другому, как вы ожидаете, если вы привыкли к тому, как они работают на другом языке, таком как C.

В частности,% s также хорошо работает для int и float, если у вас нет специальных требований к форматированию, где% d или% f даст вам больше контроля.