单引号与双引号[关闭]


79

我刚从Java背景开始从事Python的工作,并且注意到其他开发人员倾向于使用单引号('')而不是双引号("")来引用字符串。例如:

line1 = 'This is how strings typically look.'
line2 = "Not like this."

除了个人喜好之外,还有其他特殊原因吗?这是引用字符串的正确方法吗?具体来说,我想知道的是,是否存在某种类型的标准或公认的最佳实践来推动这种编码方式。


5
如果你有机会进入Ruby,实际上单引号和双引号之间的技术差异。双引号支持字符串插值-单引号解析为文字。
KChaloux 2012年

5
对于Perl和大多数shell来说也是如此。
Blrfl 2012年

18
这个问题如何“不具有建设性”?作为一个绝对的python初学者,我需要知道这一点。如果您编写bash脚本,则会有很大的不同
。– Magicsowon

19
不是建设性的?真是的 Google的第一个“ python单双引号”结果,告诉您您需要快速了解的内容。谢谢你的邀请埃里克和回答detly
aggieNick02

Answers:


65

其他答案是正确的,因为这没有技术上的区别,但是我在几个开源项目中看到了一个非正式的样式规则:双引号用于最终可能对用户可见的字符串(无论是否需要)翻译)和单引号用于与代码本身的功能有关的字符串(例如dict键,正则表达式,SQL)。

这当然不是通用规则(甚至不是在PEP中编写的),因此就像编码的任何其他任意方面一样,它归结为局部规则。

请注意,PEP 8(写此答案时并未注意到)

本PEP对此不做任何建议。选择一条规则并坚持下去。但是,当字符串包含单引号或双引号字符时,请使用另一个以避免在字符串中使用反斜杠。它提高了可读性。

正如评论员指出的那样,这不一定是矛盾的,具体取决于您对“规则”的解释。不过,我建议的内容在报价的后半部分实际上并不起作用。


1
这可能是房屋风格,但与PEP 8背道而驰:选择一个并将其用于整个文件,而不管其内容如何。
尼尔斯·冯·巴特

4
@NilsvonBarth PEP说“选择一个规则并坚持下去”,而不是“选择一个定界字符并坚持下去”。“对用户可见的文本使用双引号,对机器使用的东西使用单引号”似乎是一个非常好的规则。
Tanner Swett

1
@Tanner Swett抱歉,您是对的;这是Google Python样式指南,它指定“在文件内” google.github.io/styleguide/pyguide.html#310-strings
Nils von Barth

Black实际上将Python字符串格式化为用双引号引起来。甚至jslint都希望JavaSciprt字符串被双引号引起来。大多数较旧的语言甚至从未提供过选项。仅仅因为您可以做到,并不意味着您应该这样做。当然,在某些情况下,这是非常好的事情,例如在字符串中加引号时。但是,实际上,大多数字符串应该来自未在代码库中硬编码的数据集。
Bobort

1
@bobort即使您在翻译或UI系统中查找字符串,您仍然经常需要代码中的字符串键。但是我同意事情已经发展了,这种区别实际上没有任何好处。
不错的

21

这很简单:

  • 单引号允许不转义地嵌入双引号。
  • 双引号允许嵌入未转义的单引号。

'在需要双引号之前,最好使用Python (单引号)。

以下引用直接来自有关字符串文字的文档。

在Unicode字符串中可用。在Python 2中,前缀'b'或'B'被忽略;它表示文字应该在Python 3中变成字节文字(例如,当代码使用2to3自动转换时)。前缀“ u”或“ b”后可以带有前缀“ r”。

在三重引用的字符串中,允许(并保留)未转义的换行符和引号,但一行中三个未转义的引号会终止该字符串。(“引号”是用于打开字符串的字符,即“或”。)


15
当然,问题是-当几乎所有其他语言都使用双引号时,为什么Pythonic更喜欢单引号?
马丁·贝克特

13
@MartinBeckett 因为

3
当然啊;-)
马丁·贝克特

6
@JarrodRoberson:我认为“因为”(或“因为”,如果您愿意的话)是有效的答案,如果它是以某种PEP(或类似的方式)编写的,那是Python方式。否则,这只是个人选择。
Joachim Sauer

5
单引号看起来更干净,也不需要使用Shift键来输入
JoelFan's

17

从技术角度来看,这没有什么区别,从样式角度来看,有一些想法:

  • 大多数其他编程语言都使用双引号。
  • 用英语书写时,通常使用双引号。
  • 当您的应用程序中包含大量非技术/叙述性文本时,单引号很有用,因为它们使您可以更自然地使用双引号。 bar = '"It\'s awesome" he said.'
  • 另一方面,英语中也有几次使用单引号字符。 bar = "\"It's awesome\" he said."

请注意,“”也经常用在技术字符串中,例如,您提交了“ {dumb_thing},但这对我们来说也太愚蠢了!”
克里斯汀·索尔

4

在Python中使用单引号和双引号之间没有区别。实际上,根据使用的数据类型,您可能会发现一种或另一种样式更方便。

“默认情况下”(没有迫不得已的理由使用其中一种)使用的报价类型几乎完全取决于个人喜好。

有关更多信息,请参见Python文档中有关字符串文字的部分。


4

养成定期使用单引号或双引号的习惯时应考虑的一些事项。

双引号需要两个手指键;因此更有可能出现输入错误以及速度降低

您的编辑器可能显示一个字符好于另一个。便于进行视觉语法调试。

文档字符串使用三字符:哪个看起来更好?““““““ 要么 ''''''

尽管我在Windows OS上没有看到此信息,但是某些语法或文档工具可能希望使用双节单引号。

对于大多数Python教程,我已经看到了与您相反的经验。我通常会看到使用双引号。


4

我认为我更喜欢对字符串使用双引号

为什么? 对于其他语言的程序员来说,可以快速适应并更容易理解代码。

如果是C程序员,请参见:

'Writing "It\'s big?" No.'

会犹豫,而不是:

"Writing \"It's big?\" No."

3
“写着“那是大吗?”
API-Beast

@Lucio这就是我一直在做的事情,我只是不知道自己是否违反了某种已建立的Python标准。
埃里克·海德里克

@EricHydrick不,您可以选择其中之一。
Lucio
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.