根据Python 2.7.12 文档 https://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting:
!s
(apply str()
) and !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'
那么这里的“转换值”是什么意思呢?使其不那么人类可读?
为了格式化某些东西in一个字符串,必须首先创建该内容的字符串表示形式。 “转换值”基本上是在讨论如何构造字符串表示形式。在Python中,有两种相当自然的选择来获取某事物的字符串表示......str
and repr
. str
一般来说对人类更友好一些,repr
一般是比较精确的。或许是官方文档 https://docs.python.org/3/reference/datamodel.html#object.__repr__是寻找差异的最佳地点:
object.__repr__(self)
object.__str__(self)
-
由 str(object) 以及内置函数 format() 和 print() 调用,以计算对象的“非正式”或可良好打印的字符串表示形式。返回值必须是字符串对象。
-
该方法不同于object.__repr__()
因为没有期望__str__()
返回有效的 Python 表达式:可以使用更方便或更简洁的表示形式。
-
内置类型对象调用定义的默认实现object.__repr__()
.
In str.format
, !s
选择使用str
格式化对象,而!r
选择repr
格式化该值。
通过字符串可以很容易地看出差异(如repr
对于字符串将包含外引号)。:
>>> 'foo {}'.format('bar')
'foo bar'
>>> 'foo {!r}'.format('bar')
"foo 'bar'"
这两种方法之间的区别实际上主要取决于正在格式化的对象。对于许多对象(例如那些不覆盖__str__
方法),格式化输出不会有任何差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)