单引号与Python中的双引号

时间:2008-09-11 08:18:55

标签: python coding-style

根据文档,它们几乎可以互换。是否有一种风格上的理由使用其中一种?

19 个答案:

答案 0 :(得分: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

答案 1 :(得分:96)

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

  

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

所以没有区别。相反,人们会告诉您选择与上下文相匹配的风格,并保持一致。我同意 - 并补充说,尝试为这类事情提出“惯例”是没有意义的,因为你最终会混淆任何新人。

答案 2 :(得分:90)

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

我已更改为使用"""docstrings"""的三重引号,以符合PEP 257

答案 3 :(得分:44)

我和Will在一起:

  • 文字的双引号
  • 任何行为类似于标识符
  • 的单引号
  • 为regexps双引号原始字符串文字
  • docstrings的双引号

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

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

答案 4 :(得分:26)

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

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

我在野外看到的Python代码倾向于支持"超过',但只是略微偏爱。唯一的例外是"""these"""'''these'''更常见,我所看到的就是这样。

答案 5 :(得分:21)

三重引用的评论是这个问题的一个有趣的副标题。 PEP 257 specifies triple quotes for doc strings。我使用Google代码搜索进行了快速检查,结果发现triple double quotes in Pythontriple single quotes一样受欢迎程度约为10倍 - 在Google索引代码中出现了1.3M与131K的比例。因此,在多行情况下,如果使用三重双引号,您的代码可能会更加熟悉。

答案 6 :(得分:13)

"If you're going to use apostrophes, 
       ^

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

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

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

答案 7 :(得分: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'

答案 8 :(得分:3)

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

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

答案 9 :(得分:3)

我个人坚持一个或另一个。没关系。提供自己的意思或者引用它只是为了在你合作时混淆其他人。

答案 10 :(得分:2)

这可能比任何东西都更具风格偏好。我刚检查了PEP 8,没有看到任何单引号和双引号的提及。

我更喜欢单引号,因为它只有一次击键而不是两次。也就是说,我不需要将shift键混合以进行单引号。

答案 11 :(得分:2)

  

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

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

Python不,我害怕。从技术上看,没有$ token(或类似的)将名称/文本与Python中的变量分开。毕竟,这两个功能使Python更具可读性,更少混淆。单引号和双引号可以在Python中互换使用。

答案 12 :(得分:1)

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

答案 13 :(得分:1)

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

当然,在引用引用行为者时,两者之间的切换可能并不是那么异想天开......

答案 14 :(得分:0)

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

也许以下列方式考虑像素最小化理念是有帮助的。您是否希望英文字符看起来像A B CAA BB CC?后一种选择浪费了50%的非空像素。

答案 15 :(得分:0)

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

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

的外观

答案 16 :(得分:0)

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

答案 17 :(得分:-1)

我使用双引号,因为我在大多数语言(C ++,Java,VB ...)中已经这样做多年,除了Bash,因为我也在普通文本中使用双引号,因为我使用的是(修改过的)非两个字符都需要shift键的英文键盘。

答案 18 :(得分:-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")

结果相同

=>>不,他们不一样。 单个反斜杠将转义字符。您恰好在该示例中运气,因为\k\w不是有效转义,例如\t\n\\\"

如果你想使用单个反斜杠(并将它们解释为这样),那么你需要使用“原始”字符串。您可以通过在字符串

前放置一个“r”来完成此操作
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

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