单引号字符串 vs 双引号字符串

6
为什么单引号字符串需要转义字符,而双引号字符串不需要?
a = 'hello how\'s it going'
a1 = 'hello how's it going'
b =  "hello how's it going"

assert(a==b) # Passes

assert(a1==b) # Errors

错误信息:
文件 "string.py",第 1 行
    a = 'hello how's it going'
                  ^
SyntaxError: 无效的语法

5
要知道在 "how's" 中的单引号是用来终止字符串,还是作为文字字面量中的字符,这是不确定的。这种情况具有歧义。 - Carcigenicate
2
同样的道理也成立,你不能在双引号字符串中使用未转义的双引号。例如,'我对她说“你好”'是合法的,但是"我对她说"你好""是不合法的。 - Some programmer dude
that explains! thanks - user8547000
5个回答

8

无论你在字符串周围使用 ' 还是 " 来标记它作为字符串字面量都没有关系。但是,如果你不在字符串字面量中使用 \ 转义字符来转义某个字符,那么就不能在字符串字面量中使用该字符,否则 Python 将将其解释为字符串的结尾。

例如,在用 " 包含的字符串字面量中," 也需要被转义:

a = "And he said: \"What a nice day\"."

感谢澄清,我一直在想为什么 Python 没有统一的字符串定义方式,而是要用单引号/双引号让人感到困惑。 - user8547000
因为这样可以在字符串中使用另一个字符而无需转义。因此,如果您的字符串中有 ",最好使用 ' 作为分隔符,反之亦然。很少有情况需要在字符串中同时使用 '",如果发生这种情况,则需要转义其中一个字符。 - MSeifert
2
@counter98:统一的方法是使用三引号:"""在这里写任何你想要的内容: "'"''"'"'"''""'"' """ - Eric Duminil
3
你的意思是“除了"""之外的任何东西”(或者在这种情况下是以'''为分隔符的多行字符串)。 - MSeifert
2
@MSeifert:哈哈,我猜这是信息理论中的固有问题。你需要一个分隔符,并且它不能未经转义地出现在字符串中。 - Eric Duminil

0

你可以使用单引号或双引号,但如果你想在字符串中使用它们而不需要转义,那么开头和结尾的符号应该与字符串内部使用的不同。

例如,你可以这样做:

a = "hello how's it going"

或者:

a = 'hello my "friend"'

0

单引号

当您使用单引号'开始字符串时,它会查找下一个单引号'来结束该字符串。当它遇到第二个单引号'时,它将以该引号结束字符串,并且在第二个引号之后不再接受任何内容作为字符串。因此,您需要使用反斜杠作为转义字符来输入引号。

双引号

正如您可能已经猜到的那样,在这种情况下,字符串也是以双引号"开头和结尾的。在第一个双引号和第二个双引号之间,它接受除双引号之外的任何内容作为字符串(原因与单引号的情况相同)。

希望这能澄清您对字符串的概念:)


0
选择使用哪种类型(单引号和双引号)取决于程序员的选择。通常,双引号用于字符串表示,单引号用于正则表达式、字典键或 SQL。因此,在 Python 中,单引号和双引号都表示字符串,但有时我们需要使用其中一种类型。 阅读更多

0

因为单引号会结束字符串。例如

'Broken' single quote string'
"Broken" double quote string"

如果你需要在字符串中使用单引号,就要用双引号,反之亦然

"valid 'single' quote in a string"
'valid "double" quote in a string'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接