what's the meaning of %r
in the following statement?
print '%r' % (1)
I think I've heard of %s
, %d
, and %f
but never heard of this.
what's the meaning of %r
in the following statement?
print '%r' % (1)
I think I've heard of %s
, %d
, and %f
but never heard of this.
It calls repr()
on the object and inserts the resulting string.
See String Formatting Operations in the docs. Notice that %s and %d etc, might work differently to how you expect if you are used to the way they work in another language such as C.
In particular, %s also works well for ints and floats unless you have special formatting requirements where %d or %f will give you more control.
Background:
In Python, there are two builtin functions for turning an object into a string: str vs. repr. str is supposed to be a friendly, human readable string. repr is supposed to include detailed information about an object's contents (sometimes, they'll return the same thing, such as for integers). By convention, if there's a Python expression that will eval to another object that's ==, repr will return such an expression e.g.
>>> print repr('hi') 'hi' # notice the quotes here as opposed to... >>> print str('hi') hi
If returning an expression doesn't make sense for an object, repr should return a string that's surrounded by < and > symbols e.g. <blah>
.
To answer your original question:
%s <-> str
%r <-> repr
In addition:
You can control the way an instance of your own classes convert to strings by implementing __str__
and __repr__
methods.
class Foo: def __init__(self, foo): self.foo = foo def __eq__(self, other): """Implements ==.""" return self.foo == other.foo def __repr__(self): # if you eval the return value of this function, # you'll get another Foo instance that's == to self return "Foo(%r)" % self.foo
Python's documentation, describing these methods and their related functions:
http://docs.python.org/reference/datamodel.html#object.__repr__