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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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.
Method 2
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 = "nJannFebnMarnAprnMaynJunnJulnAug" print "Here are the months: %r" % months
Output:
Here are the months: 'nJannFebnMarnAprnMaynJunnJulnAug'
Check this example from Learn Python the Hard Way.
Method 3
%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..
Method 4
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.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0