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

时间:2011-08-28 13:03:02

标签: python string-conversion

所以我有这段代码:

    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

2 个答案:

答案 0 :(得分: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']是在脚本中编写的字符序列,用于定义列表< strong> li 使用此值

  

示例2

如果考虑ss = 'oregon'定义的字符串:

print ss将打印 oregon ,不附带任何引用

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

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

答案 1 :(得分:0)

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

通过文档:

str()

  

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

repr()

  

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

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

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