что означает %r в python
что значит %r в следующем утверждении?
print '%r' % (1)
кажется, я слышал о %s,%d и %f но никогда не слышал об этом.
6 ответов:
Справочная информация:
в 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>.чтобы ответить на ваш первоначальный вопрос:
кроме того:
вы можете управлять тем, как экземпляр ваших собственных классов преобразуется в строки с помощью реализация
__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
Он называет
repr()на объект и вставляет полученную строку.
добавление к ответам, приведенным выше,
'%r'может быть полезно в случае, когда у вас есть список с гетерогенным типом данных. Допустим, у нас естьlist = [1, 'apple' , 2 , 'r','banana']Очевидно, что в этом случае с помощью'%d'или'%s'вызовет ошибку. Вместо этого мы можем использовать'%r'для печати всех этих значений.
посмотреть Операции Форматирования Строк в документации. Обратите внимание, что %s и %d и т. д. могут работать иначе, чем вы ожидаете, если вы привыкли к тому, как они работают на другом языке, например C.
в частности, %s также хорошо работает для ints и поплавков, если у вас нет специальных требований к форматированию, где %d или %f даст вам больше контроля.
%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'