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

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


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

评论

如果您曾经接触过Ruby,单引号和双引号之间实际上存在技术上的区别。双引号支持字符串插值-单引号解析为文字。

对于Perl和大多数shell,也是如此。

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

不是建设性的?真是的Google的第一个“ python单双引号”结果,告诉您您需要快速了解的内容。感谢您询问埃里克并认真回答

#1 楼

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

这当然不是通用规则(甚至不是PEP),因此就像编码的任何其他任意方面一样,它都取决于本地规则。

请注意,PEP 8(我在写此答案时没有注意到)说:


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


正如评论者所指出的,这不一定是矛盾的,具体取决于您对“规则”的解释。我建议的内容实际上并不能与报价的后半部分配合使用。

评论


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

–尼尔斯·冯·巴特(Nils von Barth)
19年1月3日在15:54

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

– Tanner Swett
19年1月4日在20:53

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

–尼尔斯·冯·巴特(Nils von Barth)
19年1月6日在20:42

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

– Bobort
19年4月18日在17:44



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

–甜蜜地
19年4月19日在0:44

#2 楼

这非常简单:


单引号允许对双引号进行不转义的嵌入。
双引号允许嵌入未转义的单引号。

在需要双引号之前,使用'(单引号)是大多数Python语言。

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


用简单的英语:字符串文字可以用匹配的单引号(')或双引号(“)引起来。也可以将它们括在匹配的
组中,该组由三个单引号或双引号引起来(通常称为
,称为三引号字符串)。反斜杠()字符用于
转义符,否则具有特殊含义,例如
换行符,反斜杠本身或引号字符。字符串文字可能
可选地以字母“ r”或“ R”为前缀;此类字符串为
称为原始字符串,并使用不同的规则来解释反斜杠
转义序列。前缀“ u”或“ U”使字符串成为Unicode
字符串。Unicode字符串使用Unicode特性由Unicode联盟和ISO 10646定义的一组设置。Unicode字符串中提供了一些下面描述的其他转义序列。 Python 2中会忽略'b'或'B'的前缀
;它表示文字
应该成为Python 3中的字节文字(例如,当代码
用2to3自动转换时)。 ,后跟'r'前缀。

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


评论


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

–马丁·贝克特(Martin Beckett)
2012年7月2日在4:03

@MartinBeckett因为

–user7519
2012年7月2日在4:58

当然啊;-)

–马丁·贝克特(Martin Beckett)
2012年7月2日,下午5:11

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

–约阿希姆·绍尔(Joachim Sauer)
2012年7月2日在7:41

单引号看起来更干净,也不需要输入Shift键

– JoelFan
17年5月29日下午4:23

#3 楼

从技术的角度来看,这没有什么区别,从样式的角度来看,它有以下几点想法:


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

另一方面,英语中也有几次使用单引号字符。 bar = "\"It's awesome\" he said."



评论


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

–克里斯蒂安·绍尔(Christian Sauer)
19年1月7日,12:36

#4 楼

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

“默认情况下”使用的引号类型(没有令人信服的理由)使用一个或另一个)完全是个人喜好问题。

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

#5 楼

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

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

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

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

尽管我在Windows操作系统上没有看到此内容,但某些语法或文档工具可能希望使用单节双引号。

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

#6 楼

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

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

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

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


会犹豫,而不是:

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


评论


“写着“这很大吗?”

– API-Beast
2012年7月2日,下午2:21

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

–埃里克·希德里克(Eric Hydrick)
2012年7月2日,12:14

@EricHydrick不,您可以选择其中之一。

– Lucio
2012年7月2日在22:43