python中%r的含义是什么?

时间:2010-03-01 07:13:09

标签: python sign

以下陈述中%r的含义是什么?

print '%r' % (1)

我想我听说过%s%d%f,但从未听说过这一点。

9 个答案:

答案 0 :(得分:73)

背景:

在Python中,有两个内置函数可以将对象转换为字符串:strreprstr应该是一个友好的,人类可读的字符串。 repr应该包含有关对象内容的详细信息(有时,它们会返回相同的内容,例如整数)。按照惯例,如果有一个Python表达式将eval到另一个==的对象,repr将返回这样的表达式,例如。

>>> print repr('hi')
'hi'  # notice the quotes here as opposed to...
>>> print str('hi')
hi

如果返回表达式对某个对象没有意义,repr应该返回一个被&lt;包围的字符串。和&gt;例如<blah>

回答你原来的问题:

%s&lt; - &gt; str
%r&lt; - &gt; repr

另外:

您可以通过实施__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

答案 1 :(得分:20)

它在对象上调用repr()并插入结果字符串。

答案 2 :(得分:4)

它使用repr()将替换打印为字符串。

答案 3 :(得分:3)

添加上面给出的回复,'%r'在您拥有异构数据类型列表的场景中非常有用。 我们说,我们有list = [1, 'apple' , 2 , 'r','banana'] 显然,在这种情况下使用'%d''%s'会导致错误。相反,我们可以使用'%r'打印所有这些值。

答案 4 :(得分:1)

%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'"

答案 5 :(得分:1)

%s调用所选对象的__str()__方法,并将其自身替换为返回值,

%r调用所选对象的__repr()__方法,并将其自身替换为返回值。

答案 6 :(得分:0)

请参阅文档中的String Formatting Operations。请注意,如果您习惯于使用其他语言(例如C)工作的方式,%s和%d等可能与您的预期方式不同。

特别是,%s也适用于整数和浮点数,除非你有特殊的格式要求,其中%d或%f会给你更多的控制权。

答案 7 :(得分:0)

$this->Behaviors->attach('Containable');

return $this->find('all', array(
    'contain' => array('RestaurantMenu.RestaurantMenuItem'),
    'conditions' => array(
        'Restaurant.id' => $restaurant_id,
    ),
    'recursive' => 0
));

%s <=> str %r <=> repr 在对象上调用repr(),并插入由%r返回的结果字符串。

__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')

答案 8 :(得分:0)

我读过《艰苦学习Python》,作者说

  

%r最适合调试,其他格式用于向用户显示变量