4

所以我有这个代码:

    formatter = "%r %r %r %r"

print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")

我得到这个输出:

1 2 3 4

'一二三四'


我的问题是:

为什么第二行输出有单引号?我不太确定 %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

一二三四

我只是不明白为什么它们的工作方式不同。有人可以为我分解吗?


我读了:

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

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

4

2 回答 2

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将打印俄勒冈州,周围没有任何报价

print repr(ss)将打印'oregon',因为'oregon'如果要在程序中使用值oregon定义字符串ss ,则必须在脚本中编写字符序列

.

因此,这意味着,事实上,对于普通对象,repr()str()返回的字符串通常相等,但字符串对象除外。这使得repr()对于字符串对象特别有趣。例如,分析 HTML 代码的内容非常有用。

于 2011-08-28T13:57:41.277 回答
0

%stell 的 python 调用str()元组的每个元素上的函数。%rtell 的 python 调用repr()元组的每个元素上的函数。

通过文档:

字符串()

返回一个字符串,其中包含一个对象的可很好打印的表示。对于字符串,这将返回字符串本身。

代表()

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

这意味着,如果您调用的对象repr()是字符串对象(在 python 中,一切都是对象),它将向您展示不同字符的表示方式。

@您的具体问题:我假设“...”表示它是一个字符串。如果您在 int 上调用 repr(),则没有“...”。

于 2011-08-28T13:12:52.847 回答