初学者Python问题:关于字符串格式化类型和repr()函数

4 投票
2 回答
817 浏览
提问于 2025-04-17 00:28

我有一段代码:

    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

我就是不明白为什么它们的表现不一样。有人能给我解释一下吗?


我看过:

http://docs.python.org/library/stdtypes.html &

http://docs.python.org/library/functions.html#repr

2 个回答

0

%s 告诉 Python 对你元组中的每个元素使用 str() 函数。%r 则是告诉 Python 对你元组中的每个元素使用 repr() 函数。

根据文档:

str()

返回一个包含对象的好看可打印表示的字符串。对于字符串来说,这个函数直接返回字符串本身。

repr()

返回一个包含对象的可打印表示的字符串。

这意味着,如果你对一个字符串对象使用 repr(),它会显示出不同字符是如何表示的。(在 Python 中,一切都是对象)

关于你具体的问题:我猜“...”表示这是一个字符串。如果你对一个整数使用 repr(),就不会有“...”了。

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 代码的内容时非常有用。

撰写回答