nal*_*zok 15 python string formatting repr python-2.7
!s(applystr())和!r(applyrepr())可用于在格式化之前转换值.Run Code Online (Sandbox Code Playgroud)>>> 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'
Run Code Online (Sandbox Code Playgroud)
那么"转换价值"在这里意味着什么呢?使它不那么人性化?
mgi*_*son 25
为了格式化的东西在一个字符串中的东西的字符串表示必须先创建."转换值"基本上是在讨论如何构造字符串表示.在python中,有两个相当自然的选择来获取某些东西的字符串表示... str和repr. str通常更人性化一点,repr一般更精确.也许官方文档是寻找差异的最佳位置:
object.__repr__(self)
由
repr()内置函数调用以计算对象的"官方"字符串表示.如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境).如果无法做到这一点,<...some useful description...>则应返回表单的字符串.返回值必须是字符串对象.如果类定义__repr__()但未定义__str__(),则__repr__()在需要该类的实例的"非正式"字符串表示时也使用.这通常用于调试,因此表示信息丰富且明确是很重要的.
object.__str__(self)
由str(对象)和内置函数format()和print()调用,以计算对象的"非正式"或可良好打印的字符串表示形式.返回值必须是字符串对象.
此方法的不同之处在于
object.__repr__()不期望__str__()返回有效的Python表达式:可以使用更方便或简洁的表示.内置类型对象调用的默认实现调用
object.__repr__().
在str.format,!s选择使用str格式化对象,而!r选择repr格式化值.
字符串很容易看出差异(repr对于字符串将包括外部引号):
>>> 'foo {}'.format('bar')
'foo bar'
>>> 'foo {!r}'.format('bar')
"foo 'bar'"
Run Code Online (Sandbox Code Playgroud)
这两种方法之间的区别究竟真正取决于被格式化的对象.对于许多对象(例如那些不覆盖该__str__方法的对象),格式化输出没有区别.
| 归档时间: |
|
| 查看次数: |
8867 次 |
| 最近记录: |