[Tutor] What's the difference between %s and %r?

James Reynolds eire1130 at gmail.com
Sat Jul 23 17:24:32 CEST 2011


I just use string{0}.format(arg) format and that solves needing to memorize
% whatevers.

On Sat, Jul 23, 2011 at 11:08 AM, Martin A. Brown <martin at linux-ip.net>wrote:

>
> Hello everybody,
>
>  : > Hello! I'm having troubles understanding what is the difference
> between %s
>  : > and %r(format characters). I did google  and found something on
>  : > StackOverflow but I don't understand the explanation as it's not
> beginner
>  : > orientated.
>  : >
>  : >
>  : > Also, I have this code from learn python the hard way. Why at line 9
> does
>  : > he uses %r? Why did he didn't wrote print "I said: %s." %x ?
>  : >
>  : > 1    x = "There are %d types of people." % 10
>  : > 2    binary = "binary"
>  : > 3    do_not = "don't"
>  : > 4    y = "Those who know %s and those who %s." % (binary, do_not)
>  : > 5
>  : > 6    print x
>  : > 7    print y
>  : > 8
>  : > 9    print "I said: %r." % x
>  : > 10  print "I also said: '%s'." % y
>  : > 11
>  : > 12  hilarious = False
>  : > 13  joke_evaluation = "Isn't that joke so funny?! %r"
>  : > 14
>  : > 15  print joke_evaluation % hilarious
>  : > 16
>  : > 17  w = "This is the left side of..."
>  : > 18  e = "a string with a right side."
>  : > 19
>  : > 20  print w + e
>  : >
>  : >
>  : >
>  : > Thanks in advance!
>  :
>  : I have recently worked through that exact question myself.  And
>  : it isn't well explained.
>  :
>  : So - the simplistic answer, gleaned (hopefully not erroneously)
>  : from this list:  s means a string, d means a number and r can be
>  : either or both.  y has only words, so is a string, and x has a
>  : number (specifically referred to as d) and words, so needs r.
>
> I am not horrendously well-versed here, but consider the mnemonic.
>
>  %f   float
>  %d   digit
>  %s   string
>  %r   representation
>
> A representation is something that (might?) allow for some sort of
> round-trip, later (re)construction of the object.  A string is
> intended for general consumption.  Do you really need to distinguish
> them?  Only if you plan on re-consuming your own output, at which
> point you should consider the representation rather than the string.
>
> There are doubtless more experienced hands here who will suggest
> concretely what you might do, but I would suggest that you use %s
> (string) for anything that you want to show to an end user and %r
> iif* you are planning to (re-)consume your own printed output.
>
> -Martin
>
>  * iif = if and only if
>
> --
> Martin A. Brown
> http://linux-ip.net/
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110723/59fa20bc/attachment-0001.html>


More information about the Tutor mailing list