%r 是啥意思?

Posted

技术标签:

【中文标题】%r 是啥意思?【英文标题】:What is the meaning of %r?%r 是什么意思? 【发布时间】:2011-01-22 04:44:46 【问题描述】:

下面语句中%r是什么意思?

print '%r' % (1)

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

【问题讨论】:

【参考方案1】:

背景:

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

>>> 打印 repr('hi') 'hi' # 注意这里的引号,而不是... >>> 打印 str('hi') 你好

如果返回一个表达式对一个对象没有意义,repr 应该返回一个由 符号包围的字符串,例如<blah>.

回答你原来的问题:

%s str%r 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

【讨论】:

我发现 %r 对于打印未知编码的字符串很有用,否则 %s 会引发错误【参考方案2】:

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

【讨论】:

【参考方案3】:

它将替换打印为带有repr() 的字符串。

【讨论】:

【参考方案4】:

除了上面给出的回复之外,'%r' 在您有一个具有异构数据类型的列表的情况下可能很有用。 比方说,我们有一个list = [1, 'apple' , 2 , 'r','banana'] 显然在这种情况下使用'%d''%s' 会导致错误。相反,我们可以使用'%r' 来打印所有这些值。

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:
%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'

【讨论】:

【参考方案7】:

%s调用选中对象的__str()__方法,并用返回值替换自己,

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

我在《Learning Python the Hard Way》中读到,作者说

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

【讨论】:

以上是关于%r 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

r;是啥意思?

%r 是啥意思?

NCW中POWER中R是啥意思

r-squared是啥意思

obs*R-squared是啥意思

pythons re.compile(r' pattern flags') 中的“r”是啥意思?