Python 某些%r格式以双引号而不是单引号开始和结束

Python 某些%r格式以双引号而不是单引号开始和结束,python,Python,我有两个类似的python代码 formatter = "%r %r %r %r" print formatter % ( "I had this thing", "That you could type upright", "But it didn't sing", "So I said goodnight" ) print formatter % ( "hi!", "My name is __!", "nice to meet you!

我有两个类似的python代码

formatter = "%r %r %r %r"
print formatter % (
    "I had this thing",
    "That you could type upright",
    "But it didn't sing",
    "So I said goodnight"
)
print formatter % (
    "hi!",
    "My name is __!",
    "nice to meet you!",
    "thank you!"
)
另一个被打印为“”,但在第一个代码中,唯一的第三个短语被打印为“但它没有唱”。 为什么会出现双引号

结果:

“我有这个东西。”“你可以输入正确的东西。”“但是它没有唱。”“所以我说晚安。”

好的,这是因为函数返回对象的可打印表示形式。我的意思是,在其他短语中,您没有使用单引号字符
,因此不需要使用双引号
。这相当于说:

'But it didn\'t sing'
但是,Python解释器将尝试遵循(使用到最简单的选项)。在这种情况下,最简单的选项是使用双引号,并将单引号放在其中。例如,尝试以下短语:

"My name is \"__!\""

您将看到它正在打印:
“我的名字是”\uuuu!“
(最简单的选项)

第三行中没有包含单引号。同样,按照最佳实践,您应该始终使用单引号。这意味着,鉴于“我有这个东西”使用了不必要的双引号,解释器将使用单引号,意思是‘我有这个东西’。在第三种情况下,您将”但是它没有唱。“在这种情况下,双引号是必要的,因为中间有一个引号。通常你总是使用单引号,当你需要特殊的东西时,你使用双引号,这就是解释器正在做的。