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."
)
在这个程序中,没有错,但只是一个问题。请注意,最后一行输出对单个部分使用单引号和双引号。你为什么这么认为?为什么他们没有选择在所有字符串周围使用双引号
答案 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,则只能看到没有引号的字符串:)