输出"但它没有唱歌。"

时间:2016-07-26 02:16:17

标签: python

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

在这个程序中,没有错,但只是一个问题。请注意,最后一行输出对单个部分使用单引号和双引号。你为什么这么认为?为什么他们没有选择在所有字符串周围使用双引号

2 个答案:

答案 0 :(得分:2)

Python对象(在可行的情况下)尝试以可用于在使用repr时精确重建对象的方式表示自己。由于您的格式字符串为%r而不是%s,因此您需要提供字符串repr而不是str代表。对于其中包含单引号的字符串,有许多选项可以是有效的repr表示形式......我的头脑中有一些是:

"foo'bar"
'foo\'bar'
"""foo'bar"""
'''foo'bar'''

在这些选择中,第一个版本看起来最好,以便他们选择使用它们。您可能会问为什么他们没有选择在所有字符串周围使用双引号,但当然您对具有双引号的字符串也有同样的问题......

答案 1 :(得分:2)

这是重复的,因为你正在使用字符串的原始表示。 所以让我们看看

对于这句话,"I had this thing."输出将是单引号或双引号,因为字符串中没有单/双qoutes,唯一包含双引号输出的字符串将是"But it didn't sing.",因为它已经包含单引号它:)。

如果您使用的是%s,则只能看到没有引号的字符串:)