%r有些不对劲

时间:2015-02-21 06:50:47

标签: python-2.7

现在我正在为LPEDW工作,为Zed Shaw工作,在这个例子中,有些事情对我没有任何意义。

首先我指定formatter = % ( "%r %r %r %r"), 然后我试着打开格式化程序。

pprint formatter % (
    "I had this thing.",
    "That you could type up right.",
    "But it didn\'t sing.",
    "So I said goodnight.",
)

输出:'I had this thing.' 'That you could type up right.' "But it didn't sing." 'So I said goodnight.'

为什么输出的单引号围绕第1,第2,第4个参数引用,但是3号引用双引号?

当我尝试为同一操作分配另一个变量时:

print formatter % ( 
"Whatever",
"Comes",
"First",
"Go first"
)

输出:'Whatever' 'Comes' 'First' 'Go first'

这里所有都是单引号,确实有意义。谁能告诉我这里发生了什么?

1 个答案:

答案 0 :(得分:1)

%r代表%repr并且应该继续提供详细信息。 比如你的代码:

First I assign formatter = % ( "%r %r %r %r")

print formatter % ( 1, 2, 3, 4 )
print formatter % (
    "I had this thing.",
    "That you could type up right.",
    "But it didn\'t sing.",
    "So I said goodnight.",
)

输出:

 1 2 3 4
'I had this thing.' 'That you could type up right.' "But it didn't sing." 'So I said goodnig'

现在,请注意第一行打印没有任何引号,因为它假设,详细说明这是整数。在第二个输出中,它的细节有第一个短语,并用引号括起来表示它的字符串

为什么输出有单引号围绕第1,第2,第4个参数,但是第3个双引号? 当我尝试为同一操作分配另一个变量时。

因为在第3个短语中你在单词don't中使用单引号所以解释器引用带双引号的短语,即使你用单引号分配字符串就是告诉你,这是字符串和里面有单引号/转义字符。

注意:即使您使用了单引号的转义字符,它也将是双引号,这正是%repr应该做的。有关详细信息,请查看repr() implementation