当前位置: 首页 > 面试题库 >

!r在str()和repr()中做什么?

阴永福
2023-03-14
问题内容

根据Python
2.7.12文档

!s(apply str())和!r(apply repr())可用于在格式化之前转换值。

>>> import math
>>> print 'The value of PI is approximately {}.'.format(math.pi)
The value of PI is approximately 3.14159265359.
>>> print 'The value of PI is approximately {!r}.'.format(math.pi)
The value of PI is approximately 3.141592653589793.

有趣的是,转换后的值是的输出repr(),而不是str()

>>> str(math.pi)
'3.14159265359'
>>> repr(math.pi)
'3.141592653589793'

那么,“转换价值”在这里意味着什么?使其难以为人所知?


问题答案:

为了格式的东西
一个字符串中的东西的字符串表示必须先创建。“转换值”基本上是在谈论如何构造字符串表示形式。在python中,有两种相当自然的选择来获取…str和的字符串表示形式repr
str通常更人性化,repr更精确。也许官方文档是寻找差异的最佳地方:

object.__repr__(self)

* 由repr()内置函数调用以计算对象的“正式”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(给定适当的环境)。如果这不可能,<...some useful description...>则应返回形式的字符串。返回值必须是一个字符串对象。如果定义了一个类__repr__()但未定义__str__(),则__repr__()当需要该类的实例的“非正式”字符串表示形式时,也会使用该类。

  • 这通常用于调试,因此,表示形式应具有丰富的信息且无歧义,这一点很重要。

object.__str__(self)

* 由str(object)和内置函数format()和print()调用以计算对象的“非正式”或可很好打印的字符串表示形式。返回值必须是一个字符串对象。

* 此方法的不同之处在于,object.__repr__()不期望__str__()返回有效的Python表达式:可以使用更方便或更简洁的表示形式。

  • 内置类型object invokes定义的默认实现object.__repr__()

在中str.format!s选择用于str格式化对象,而!r选择repr格式化值。

字符串之间的区别很容易看出来(因为repr字符串将包含外部引号):

>>> 'foo {}'.format('bar')
'foo bar'
>>> 'foo {!r}'.format('bar')
"foo 'bar'"

这两种方法之间的区别实际上主要取决于要格式化的对象。对于许多对象(例如那些不覆盖该__str__方法的对象),格式化输出将没有差异。



 类似资料:
  • 问题内容: python 2.7.5和函数之间的区别是什么? python.org上的说明: 该功能是指以返回其是相当值的表示 人类可读 ,而意在产生可以表示 由解释器读取 (或将强制如果没有相当的语法) 但这对我来说还不清楚。 一些例子: 所以我想知道以下 什么时候应该使用?什么时候应该使用? 在哪种情况下我可以使用它们中的任何一个? 做什么不能做? 做什么不能做? 问题答案: 我什么时候应该使

  • 本文向大家介绍Python 基础教程之str和repr的详解,包括了Python 基础教程之str和repr的详解的使用技巧和注意事项,需要的朋友参考一下 Python str和repr的详解 str可以将值转化为合理的字符串形式,以便用户可以理解; repr会以合法Python表达式的形式来表达值。 举例如下: 注意到,str表示一种类型,即字符串;repr则是一个函数。  如有疑问请留言或者到

  • 本文向大家介绍python使用str & repr转换字符串,包括了python使用str & repr转换字符串的使用技巧和注意事项,需要的朋友参考一下 可能比较 low 还是记录一下: str 和 repr的使用过程 str 是一个类型 (int, long 类似), 同样她也可以作为一个工厂方法 实例一个 string repr 是python 内置的函数, 用于保留一个 打印值在pytho

  • 问题内容: 好的,我尝试查找或shift的含义,但是此站点对此进行了解释:http : //www.janeg.ca/scjp/oper/shift.html 如果和孩子说话,会是什么解释? 问题答案: 计算机是二进制设备。因此,数字由1和0的序列表示。 移位只是简单地左右移动那些1和0的序列。 因此,操作员要做的就是将这些位向右移一位。 考虑数字101: 在这种情况下,最低有效位被截断了。显然,

  • 问题内容: %在JavaScript中有什么作用? 关于它是什么及其作用的定义将不胜感激。 问题答案: 这是一个 模运算符 。有关JavaScript算术运算符的更多信息,请参见本文档或规范 。 %(模量) 模运算符的用法如下: var1%var2 在前面的语句中,模运算符以第二操作数为模的形式返回第一个操作数,即var1以var2为模,其中var1和var2是变量。模函数是var1除以var2的

  • 问题内容: 在superuser.com上的帖子答案中,我们看到了 在将文件abc和bcd进行发送之前将它们排序。这导致了一个编程问题,更适合于stackoverflow。 这是如何运作的?<()构造到底是什么?它叫什么? 如果(sort abc)是在abc上运行sort并返回输出的合法调用,为什么我们需要? 也就是说,以下两行是等效的 但 是语法错误。请提示我! 问题答案: 这称为过程替换。 是