На странице 21 Learn Python the Hard Way я вижу этот пример кода:
x = "There are %d types of people." % 10
...
print "I said: %r." % x
Почему здесь используется %r
вместо %s
? Когда вы использовали бы %r
, а когда %s
?
На странице 21 Learn Python the Hard Way я вижу этот пример кода:
x = "There are %d types of people." % 10
...
print "I said: %r." % x
Почему здесь используется %r
вместо %s
? Когда вы использовали бы %r
, а когда %s
?
Спецификатор %s
преобразует объект с помощью str()
, а %r
преобразует его с помощью repr()
.
Для некоторых объектов, таких как целые числа, они дают тот же результат, но repr()
является особенным в этом ( для типов, где это возможно) он обычно возвращает результат, соответствующий синтаксису Python, который можно использовать для однозначного воссоздания объекта, который он представляет.
Вот пример с датой:
>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
'2011-05-14'
>>> repr(d)
'datetime.date(2011, 5, 14)'
Типы, для которых repr()
не создает синтаксис Python, включают те, которые указывают на внешние ресурсы, такие как file
, который нельзя гарантировать воссоздать в другом контексте.
Используйте %r
для отладки, поскольку он отображает «сырые» данные переменной, а остальные используются для отображения пользователям.
Вот как работает %r
форматирование; он печатает это так, как вы его написали (или близко к этому). Это «сырой» формат для отладки. Здесь \n
, используемый для отображения пользователям, не работает. %r
показывает представление необработанных данных переменной.
months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" % months
Вывод:
Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'
Посмотрите этот пример из Learn Python the Hard Way.
%r
показывает с кавычками:
Это будет так:
I said: 'There are 10 types of people.'.
Если бы вы использовали %s
, это было бы:
I said: There are 10 types of people..
Это версия ответа Бена Джеймса, приведенного выше:
>>> import datetime
>>> x = datetime.date.today()
>>> print x
2013-01-11
>>>
>>>
>>> print "Today's date is %s ..." % x
Today's date is 2013-01-11 ...
>>>
>>> print "Today's date is %r ..." % x
Today's date is datetime.date(2013, 1, 11) ...
>>>
Когда я запустил это, это помогло мне увидеть полезность% r.
%r
и %s
, чтобы пользователи могли более четко видеть различия.
- person amanuel2; 11.01.2017