718

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

4

19 回答 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
于 2008-09-11T10:06:49.557 回答
96

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

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

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

于 2008-09-27T18:07:24.383 回答
90

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

此后,我改为使用三引号"""docstrings""",以符合PEP 257

于 2008-09-11T08:55:17.513 回答
44

我和威尔在一起:

  • 文本的双引号
  • 任何行为类似于标识符的单引号
  • 正则表达式的双引号原始字符串文字
  • 文档字符串的三重双引号

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

由于引号,我从单引号标识符中获得最大价值。其余的做法只是为了给那些单引号标识符一些站立空间。

于 2008-09-11T10:21:35.013 回答
26

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

如果您的代码将被使用 C/C++ 的人阅读(或者如果您在这些语言和 Python 之间切换),那么使用''单字符字符串和""更长的字符串可能有助于简化转换。(同样适用于其他不可互换的语言)。

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

于 2008-09-11T08:33:56.007 回答
21

三重引用的评论是这个问题的一个有趣的子主题。PEP 257 为文档字符串指定三引号。我使用 Google 代码搜索进行了快速检查,发现Python中的三重双引号的流行程度大约是三重单引号的 10 倍——在谷歌索引代码中出现了 130 万次和 13.1 万次。因此,在多行情况下,如果您的代码使用三重双引号,人们可能会更熟悉它。

于 2009-07-30T20:35:28.783 回答
13
"If you're going to use apostrophes, 
       ^

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

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

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

于 2011-09-22T12:35:44.613 回答
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'
于 2011-01-23T21:45:13.693 回答
3

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

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

于 2008-09-11T08:40:23.603 回答
3

我个人坚持其中一个。没关系。为任何一个引用提供你自己的意思只是在你合作时混淆其他人。

于 2008-09-28T03:35:24.220 回答
2

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

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

于 2008-09-19T19:34:38.713 回答
2

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

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

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

于 2010-07-05T12:51:06.700 回答
1

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

于 2009-03-10T06:25:35.893 回答
1

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

当然,在引用引号字符时,两者之间的切换毕竟可能不是那么异想天开……

于 2009-07-22T19:50:28.183 回答
0

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

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

于 2008-09-11T08:25:09.070 回答
0

据我所知没有。虽然如果你看一些代码,“”通常用于文本字符串(我猜'在文本中比“更常见),并且''出现在hashkeys之类的东西中。

于 2008-09-11T08:28:43.663 回答
0

我的目标是尽量减少像素和惊喜。我通常更喜欢'最小化像素,但"如果字符串有撇号,则再次最小化像素。然而,对于文档字符串,我更喜欢"""它,'''因为后者是非标准的、不常见的,因此令人惊讶。如果现在我有一堆"按上述逻辑使用的字符串,但也有一个可以逃脱的字符串',我可能仍会使用"它来保持一致性,只是为了尽量减少意外。

或许以下列方式思考像素最小化理念会有所帮助。你宁愿英文字符看起来像A B C还是AA BB CC?后一种选择浪费了 50% 的非空像素。

于 2013-04-16T22:32:10.697 回答
-1

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

于 2010-07-05T13:06:13.793 回答
-4

'="

/= \=\\

例子 :

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

结果是一样的

=>> 不,它们不一样。单个反斜杠将转义字符。你只是碰巧在那个例子中走运了,因为\kand\w不是有效的转义,比如\tor \nor \\or\"

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

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

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

于 2010-01-19T04:30:29.947 回答