что означает %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'