Python中单引号和双引号的区别

718
根据文档,它们基本上是可互换的。在使用时有没有风格上的原因选择一个而非另一个?
19个回答

525

我喜欢在用于插值或自然语言消息的字符串周围使用双引号,而在小的类似符号的字符串周围使用单引号,但如果字符串包含引号或者我忘记规则,则会打破这些规则。即使不需要,我也使用三重双引号来定义文档字符串和原始字符串字面量来表示正则表达式。

例如:

LIGHT_MESSAGES = {
    'English': "There are %(number_of_lights)s lights.",
    'Pirate':  "Arr! Thar be %(number_of_lights)s lights."
}

def lights_message(language, number_of_lights):
    """Return a language-appropriate string reporting the light count."""
    return LIGHT_MESSAGES[language] % locals()

def is_pirate(message):
    """Return True if the given message sounds piratical."""
    return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None

4
有趣,我也完全以同样的方式使用它们。我不记得曾经读到过任何东西来推动我朝这个方向发展。我还会在长字符串不适合人类阅读的情况下(比如原始html),使用三个单引号。也许这与英语引号规则有关。 - Mike A
12
大多数Python编程者都这样编码。虽然没有明确的规定,但因为我们经常这样阅读代码,所以这成为一种习惯。 - Bite code
@user48814:是啊,我敢打赌你读的大部分代码都在下意识地推动你往那个方向思考。 - SamB
8
我认为Perl区分单引号字符串(无插值)和双引号字符串(有插值),而Python程序员可能会沿袭这种习惯或从未放弃它。 - Daren Thomas
2
我使用相同的约定,而且我滥用它,通过让vim将三个单引号内的所有内容都突出显示为SQL。 - RoundTower
显示剩余2条评论

96
引用官方文档 https://docs.python.org/2.0/ref/strings.html 中的说明:

简单来说:字符串文字可以用匹配的单引号(')或双引号(")括起来。

因此没有区别。相反,人们会告诉你选择与上下文相匹配的样式,并保持一致。我也同意这个观点 - 补充说明,为这种事情制定“约定”是毫无意义的,因为你只会混淆任何新手。

3
对我而言,保持一致性是关键,因此我所有地方都只使用单数形式。这样能减少按键次数,消除歧义并保持一致。 - mlissner

90

我曾经更喜欢使用单引号 ',特别是在处理 '''文档字符串''' 时,因为我认为 """这些会产生一些无用的内容"""。另外,我的瑞士德语键盘上可以不用按下 Shift 键来输入 '

后来,我改变了使用三重引号来编写 """文档字符串""",以符合 PEP 257 的规范。


2
我倾向于使用单引号,因为我每天都要编写SQL代码,并且在T-SQL中用于字符串字面量。但是我确实使用三个双引号,因为文档字符串有时需要一些额外的描述。 - eksortso
4
在字符串中随处使用简单引号让我可以使用三个双引号来禁用源代码的部分,类似于“#if 0”和“#endif”。 - dim
12
只有在PC上的QWERTY键盘上才需要使用Shift键来键入引号。在我的键盘上,键入引号实际上更容易。 - Bite code
6
在我的键盘上,双引号和单引号都需要按住Shift键才能输入。 - Loïc Faure-Lacroix
10
这个回答与Python的约定相反,请参考PEP 257,该文档指出:为了保持一致性,请始终在文档字符串周围使用"""三倍的双引号"""。http://www.python.org/dev/peps/pep-0257/ - Buttons840
显示剩余7条评论

44

我支持Will的做法:

  • 文本使用双引号
  • 任何像标识符一样的东西使用单引号
  • 正则表达式使用双引号的原始字符串字面量
  • 文档字符串使用三重双引号

即使需要大量转义,我也会坚持这种做法。

我最喜欢的是使用单引号来标识变量或常量,因为这些内容会因为引号而更加突出。其他的做法只是为了让那些使用单引号的标识符更加突出。


26
如果你的字符串包含一个引号字符,那么你应该使用另一种类型的引号。例如,"You're able to do this" 或者 'He said "Hi!"'。 除此之外,你应该尽可能保持一致性(在模块内、在包内、在项目内、在组织内)。
如果你的代码将要被那些使用C/C++的人阅读(或者你在Python和这些语言之间切换),那么单个字符的字符串使用'',较长的字符串使用""可能会有所帮助(同样适用于其他不可互换的语言)。
我在实际中看到的Python代码更倾向于使用"而不是',但两者之间的差异很小。唯一的例外是"""these"""'''these'''更常见,根据我所见。

21

三重引号注释是这个问题的一个有趣子话题。PEP 257规定了用三重引号来作为文档字符串。我通过谷歌代码搜索(Google Code Search)进行了快速检查,发现在Python中三重双引号三重单引号流行大约10倍——在Google索引的代码中有130万种使用三重双引号的情况,而只有13.1万种使用三重单引号的情况。因此,在多行情况下,如果您使用三重双引号,您的代码可能会更容易被人们理解和接受。


13
"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^
出于这个简单的理由,我总是在外面使用双引号。 总是 说到废话,如果您不得不使用转义字符来表示撇号,那么将字符串文字与 ' 流程化有什么意义呢?阅读小说会冒犯程序员吗?我无法想象高中英语课对您来说有多痛苦!

11
如果你想要“引用”某个东西,你肯定会想使用单引号。 - Paolo
自从我写这篇文章以来,我的观点在这方面发生了很大的改变。现在只有一种情况,我会主张使用双引号。另一个情况是,当你在使用单引号时。请参见被接受的答案,以了解更详细的态度。我认为这是如何向广泛的受众呈现的一个很好的例子。 - yurisich

7

Python使用引号的方式如下:

mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'

print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6

以下是输出的结果:
this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'

2
但是 """This is a string with "quotes"""" 会引发 SyntaxError 的错误。该如何解决这种情况呢?(与 '''This is a string with 'quotes'''' 相同) - dolma33
1
在“引号”和“”之间插入换行 - Nicolas
1
@dolma33 尼古拉斯的建议会改变字符串的内容。更好的解决方案已经在答案中提供:如果您的字符串以某种引号结尾,请使用其他类型的三重引号。例如,'''这是一个带有“引号”的字符串''' - jpmc26

3

个人而言,我会坚持使用其中一种。这并不重要。如果你在合作中为任何一种引用提供自己的含义,只会让其他人感到困惑。


3

一般情况下我使用双引号,但没有特别的原因——可能只是出于在Java中的惯性习惯。

我猜你更有可能在内联字面字符串中使用撇号而不是双引号。


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