2010-03-01 3 views

ответ

60

фона:

В 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>.

Чтобы ответить на исходный вопрос:

%s < ->str
%r < ->repr

Дополнительно:

Вы можете управлять тем, как экземпляр ваших собственных классов преобразования в путем применения методов __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's == to self 
    return "Foo(%r)" % self.foo 
+7

Я нашел% г полезной для печати строки неизвестного кодирования, когда в противном случае ошибка может получить брошенный с% с – dan

20

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

4

Он печатает замену в виде строки repr().

0

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

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

3

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

+0

Просьба отредактировать свой ответ – Rajesh

0
%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'