%r
在以下声明中的含义是什么?
print '%r' % (1)
我想我听说过%s
,%d
和%f
,但从未听说过这个。
背景:
在Python中,有两个内置函数可以将对象转换为字符串:str
与repr
。 str
应该是一个友好的,人类可读的字符串。 repr
应该包含有关对象内容的详细信息(有时,它们会返回相同的内容,例如整数)。按照惯例,如果有一个Python表达式将eval到另一个==的对象,repr
将返回这样的表达式,例如:
>>> print repr('hi') 'hi' # notice the quotes here as opposed to... >>> print str('hi') hi
如果返回表达式对于一个对象没有意义,repr
应该返回一个被<和>符号包围的字符串,例如<blah>
。
回答你原来的问题:
此外:
您可以通过实现__str__
和__repr__
方法来控制自己的类的实例转换为字符串的方式。
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
它在对象上调用repr()
并插入结果字符串。
它使用repr()
将替换打印为字符串。
除了上面给出的回复之外,'%r'
在您拥有异构数据类型列表的场景中非常有用。让我们说,我们有一个list = [1, 'apple' , 2 , 'r','banana']
显然在这种情况下使用'%d'
或'%s'
会导致错误。相反,我们可以使用'%r'
打印所有这些值。
%r
和%s
之间的区别是,%r
称为repr()
方法,而%s
称为str()
方法。这两个都是内置的Python函数。
repr()
方法返回给定对象的可打印表示。 str()
方法返回给定对象的“非正式”或可打印的表示。
在简单的语言中,str()
方法所做的是以最终用户希望看到的方式打印结果:
name = "Adam"
str(name)
Out[1]: 'Adam'
repr()
方法将打印或显示对象的实际外观:
name = "Adam"
repr(name)
Out[1]: "'Adam'"
请参阅文档中的String Formatting Operations。请注意,如果您习惯于使用其他语言(例如C)工作的方式,%s和%d等可能与您的预期方式不同。
特别是,%s也适用于整数和浮点数,除非你有特殊的格式要求,%d或%f会给你更多的控制权。
%s <=> str
%r <=> repr
%r
在对象上调用repr()
,并插入由__repr__
返回的结果字符串。
__repr__
返回的字符串应该是明确的,如果可能的话,匹配重新创建所表示对象所需的源代码。
一个简单的例子:
class Foo:
def __init__(self, foo):
self.foo = foo
def __repr__(self):
return 'Foo(%r)' % self.foo
def __str__(self):
return self.foo
test = Foo('Text')
所以,
in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'