python中%r的含义是什么?
在下面的语句中%r
的含义是什么?
print '%r' % (1)
我想我听说过%s
, %d
和%f
但从来没有听说过这个。
背景:
在Python中,有两个将对象转换为string的内build函数: str
与repr
。 str
应该是一个友好的,可读的string。 repr
应该包含有关对象内容的详细信息(有时,它们将返回相同的内容,例如整数)。 按照惯例,如果有一个Pythonexpression式将评估另一个==的对象, repr
将返回这样一个expression式,例如
>>> print repr('hi') '嗨'#注意这里的引用,而不是... >>> print str('hi') 嗨
如果返回一个expression式对一个对象没有意义,那么repr
应该返回一个被<和>符号包围的string,例如<blah>
。
回答你原来的问题:
%s
< – > str
%r
– repr
此外:
您可以通过实现__str__
和__repr__
方法来控制自己的类的实例转换为string的方式。
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()
并插入结果string。
它用repr()
打印replace为string。
添加到上面给出的回复中, '%r'
在具有异构数据types的列表的场景中可能很有用。 假设我们有一个list = [1, 'apple' , 2 , 'r','banana']
显然在这种情况下,使用'%d'
或'%s'
会导致错误。 相反,我们可以使用'%r'
打印所有这些值。
请参阅文档中的string格式化操作 。 请注意,%s和%d等可能会以不同的方式工作,如果您习惯于使用其他语言(如C)工作的方式
特别是,除非你有特殊的格式要求,%d或%f会给你更多的控制权,否则%s对于整数和浮点数也适用。