问题RE:字符串格式化类型和repr()函数



所以我有这样的代码:

    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

一二三四

我就是不明白为什么它们的工作方式不同。有人能给我解释一下吗?


I've read:

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

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

表示'abc%rdef' % obj,将部分'%r'替换为repr(obj)

用表达式'ABC%sDEF' % obj,将部分'%s'替换为str(obj)

.

repr()是一个函数,对于普通对象,它返回一个字符串,该字符串与您在脚本中定义作为参数传递给repr()函数的对象相同:

对于许多类型,该函数尝试返回一个string对象在传递给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,则'oregon'是必须在脚本中编写的字符序列。

.

所以,这意味着,事实上,对于普通对象,repr()str()返回的字符串一般是相等的,除了字符串对象。这使得repr()对于字符串对象来说特别有趣。分析HTML代码的内容非常有用,例如

%s告诉python在元组的每个元素上调用str()函数。%r告诉python在元组的每个元素上调用repr()函数。

By the docs:

str ():

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

repr ():

返回一个字符串,其中包含对象的可打印的表示形式。

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

@你的具体问题:我假设"…"表示,它是一个字符串。如果在int类型上调用repr(),则没有"…"

最新更新