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