On Learn Python the Hard Way page 21, I see this code example:
x = "There are %d types of people." % 10
...
print "I said: %r." % x
Why is %r
used here instead of %s
? When would you use %r
, and when would you use %s
?
asked May 14, 2011 at 22:20
coffee-grindercoffee-grinder
26.3k19 gold badges54 silver badges81 bronze badges
0
The %s
specifier converts the object using
str[]
, and %r
converts it using repr[]
.
For some objects such as integers, they yield the same result, but repr[]
is special in that [for types where this is possible] it conventionally returns a result that is valid Python
syntax, which could be used to unambiguously recreate the object it represents.
Here's an example, using a date:
>>> import datetime
>>> d = datetime.date.today[]
>>> str[d]
'2011-05-14'
>>> repr[d]
'datetime.date[2011, 5, 14]'
Types for which repr[]
doesn't produce Python syntax include those that point to external resources such as a file
, which you can't guarantee to recreate in a different context.
answered May 14, 2011 at 22:26
Ben JamesBen James
116k26 gold badges190 silver badges155 bronze badges
4
Use the %r
for debugging, since it displays the "raw" data of the variable, but the others are used for displaying to
users.
That's how %r
formatting works; it prints it the way you wrote it [or close to it]. It's the "raw" format for debugging. Here \n
used to display to users doesn't work. %r
shows the representation if the raw data of the variable.
months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" % months
Output:
Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'
Check this example from Learn Python the Hard Way.
answered Nov 30, 2013 at 6:20
%r
shows with quotes:
It will be like:
I said: 'There are 10 types of people.'.
If you had
used %s
it would have been:
I said: There are 10 types of people..
answered May 14, 2011 at 22:30
manojldsmanojlds
280k61 gold badges458 silver badges410 bronze badges
2
This is a version of Ben James's answer, above:
>>> 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] ...
>>>
When I ran this, it helped me see the usefulness of %r.
answered Jan 11, 2013 at 23:40
macloomacloo
6051 gold badge9 silver badges18 bronze badges
3