Python中的单引号与双引号

根据留档,它们几乎可以互换。是否有文体上的理由使用一个而不是另一个?

745186 次浏览

您的团队的品味或您的项目的编码指南。

例如,如果您在多语言环境中,您可能希望鼓励对其他语言使用的字符串使用相同类型的引号。否则,我个人最喜欢'

据我所知没有。尽管如果你看一些代码,“”通常用于文本字符串(我想'在文本中比“”更常见),''出现在哈希键和类似的东西中。

如果你拥有的字符串包含一个,那么你应该使用另一个。例如,"You're able to do this"'He said "Hi!"'。除此之外,你应该尽可能保持一致(在模块内、包内、项目内、组织内)。

如果您的代码将由使用C/C++的人阅读(或者如果您在这些语言和Python之间切换),那么对单字符字符串使用'',对较长的字符串使用""可能有助于简化过渡。(

我在野外看到的Python代码倾向于支持"而不是',但只是轻微的。据我所知,一个例外是"""these"""'''these'''更常见。

我一般使用双引号,但不是出于任何特定的原因-可能只是出于Java的习惯。

我想你也更有可能想要内联文字字符串中的撇号,而不是双引号。

我以前更喜欢',尤其是'''docstrings''',因为我发现"""this creates some fluff"""。此外,'可以在我的瑞士德语键盘上不用Shift键输入。

从那以后,我改变了对"""docstrings"""使用三重引号,以符合PEP 257

我喜欢在用于插值或自然语言消息的字符串周围使用双引号,对于类似符号的小字符串使用单引号,但如果字符串包含引号,或者如果我忘记了,就会违反规则。我对文档字符串使用三重双引号,对正则表达式使用原始字符串文字,即使它们不需要。

例如:

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

我和威尔在一起:

  • 文本的双引号
  • 任何表现得像标识符的东西的单引号
  • 正则表达式的双引号原始字符串文字
  • docstring的三重双引号

我会坚持下去,即使这意味着很多逃避。

我从单引号标识符中获得了最大的价值,因为引号很突出。其余的实践只是为了给那些单引号标识符一些站立的空间。

这可能是一种风格偏好。我刚刚检查了PEP 8,没有看到任何单引号和双引号的提及。

我更喜欢单引号,因为它只有一次击键而不是两次击键。也就是说,我不必混搭Shift键来制作单引号。

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

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

所以没有区别。相反,人们会告诉你选择任何与上下文匹配的风格,并保持一致。我同意-补充说,试图为这种事情想出“惯例”是没有意义的,因为你最终只会让任何新人感到困惑。

就我个人而言,我坚持其中一个。这并不重要。在任何一个引用中提供你自己的意思只是为了在你合作时混淆其他人。

我选择使用双引号,因为它们更容易看到。

我只是使用当时我喜欢的任何东西;能够随心所欲地在两者之间切换很方便!

当然,在引用引用人物时,在两者之间切换可能并不是那么异想天开…

三重引用的评论是这个问题的一个有趣的子主题。PEP 257为文档字符串指定三重引号。我使用Google代码搜索进行了快速检查,发现Python中的三重双引号的受欢迎程度大约是三重单引号的10倍--1.3M在代码Google索引中出现131K次。所以在多行情况下,如果你的代码使用三重双引号,人们可能会更熟悉它。

'="

/=\=\\

例子:

f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")

结果是一样的

=>>不,它们不一样。 单个反斜杠将转义字符。你只是碰巧在那个例子中运气不好,因为\k\w不是像\t\n\\\"这样的有效转义。

如果您想使用单个反斜杠(并将它们解释为反斜杠),那么您需要使用“原始”字符串。您可以通过在字符串前面放一个'r'来做到这一点

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

就Windows中的路径而言,正斜杠的解释方式相同。显然字符串本身是不同的。不过,我不能保证它们在外部设备上以这种方式处理。

在Perl中,当您有一个不需要插入变量或转义字符(如\n、\t、\r等)的字符串时,您希望使用单引号。

PHP与Perl有相同的区别:单引号中的内容不会被解释(甚至\n也不会被转换),而双引号可以包含变量以打印其值。

恐怕Python没有。从技术上讲,在Python中没有$标记(或类似的东西)来将名称/文本与变量分开。毕竟,这两个特性都使Python更具可读性,减少混乱。单引号和双引号在Python中可以互换使用。

我使用双引号是因为我多年来一直在使用大多数语言(C++,Java,VB……),除了Bash,因为我也在普通文本中使用双引号,因为我使用的是(修改后的)非英语键盘,其中两个字符都需要Shift键。

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'
"If you're going to use apostrophes,
^


you'll definitely want to use double quotes".
^

出于这个简单的原因,我总是在外面使用双引号。永远

说到绒毛,如果你必须使用转义字符来表示撇号,用'来简化你的字符串文字有什么好处?读小说会冒犯程序员吗?我无法想象高中英语课对你来说有多痛苦!

我的目标是同时最小化像素和惊喜。为了最小化像素,我通常更喜欢',但是如果字符串有撇号,我会选择"来最小化像素。然而,对于文档字符串,我更喜欢"""而不是''',因为后者不标准、不常见,因此令人惊讶。如果现在我有一堆字符串,根据上述逻辑我使用了",但也有一个可以使用'的字符串,我可能仍然会在其中使用"来保持一致性,只是为了最小化惊喜。

也许用以下方式思考像素最小化哲学会有所帮助。你更喜欢英文字符看起来像A B C还是AA BB CC?后一种选择会浪费50%的非空像素。