初学者Python问题:关于字符串格式化类型和repr()函数
我有一段代码:
formatter = "%r %r %r %r"
print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")
然后我得到了这个输出:
1 2 3 4
'one' 'two' 'three' 'four'
我想问的是:
为什么第二行的输出会有单引号?我不太明白 %r 这个转换类型是怎么工作的。
当我把代码改成:
formatter = "%r %r %r %r"
print formatter % (1, 2, 3, 4)
print "%s %s %s %s" % ("one", "two", "three", "four")
我得到了这个结果:
1 2 3 4
one two three four
我就是不明白为什么它们的表现不一样。有人能给我解释一下吗?
我看过:
2 个回答
在表达式 'abc%rdef' % obj
中,'%r'
这个部分会被 repr(obj)
的结果替换掉。
在表达式 'ABC%sDEF' % obj
中,'%s'
这个部分会被 str(obj)
的结果替换掉。
.
repr() 是一个函数,对于常见的对象,它会返回一个字符串,这个字符串就像你在脚本中写的那样,用来定义传给 repr() 函数的对象:
对于许多类型,这个函数会尝试返回一个字符串,当这个字符串传给 eval() 时,会得到一个值相同的对象。http://docs.python.org/library/functions.html#repr
.
例子 1
假设你有一个列表,定义为 li = [12,45,'haze']
。
print li
会输出 [12,45,'haze']。
print repr(li)
也会输出 [12,45,'haze'],因为 [12,45,'haze']
是用来定义这个列表 li 的字符序列。
例子 2
假设你有一个字符串,定义为 ss = 'oregon'
:
print ss
会输出 oregon,没有任何引号。
print repr(ss)
会输出 'oregon',因为 'oregon'
是你在脚本中定义这个字符串 ss 的字符序列。
.
所以,这意味着对于常见的对象来说,repr() 和 str() 返回的字符串通常是相等的,除了字符串对象。这使得 repr() 对字符串对象特别有趣。它在分析 HTML 代码的内容时非常有用。