单引号与Python中的双引号

Rea*_*nly 718 python coding-style

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

Wil*_*ris 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
Run Code Online (Sandbox Code Playgroud)

  • 大多数python编码器都是这样编写的.没有明确的规则,但因为我们经常以这种方式阅读代码,所以它成为一种习惯. (12认同)
  • 我认为Perl对单引号字符串(无插值)和双引号字符串(带插值)进行了区分,并且python编码器可能继承了习惯或者永远不会放弃它. (8认同)
  • 有趣的是,我以完全相同的方式使用它们.我不记得曾经读过任何东西来推动我朝这个方向前进.我也使用三重单引号用于不用于人类的长字符串,例如raw html.也许这与英语报价规则有关. (4认同)
  • 我使用相同的约定,加上我通过让vim突出显示三重单引号内的所有内容作为SQL来滥用它. (2认同)

con*_*nny 96

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

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

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

  • 是的,对我而言,一致性是关键所在,所以我只是到处使用单打.更少的按键,明确和一致. (3认同)

Dar*_*mas 90

我以前更喜欢',特别是'''docstrings'''因为我发现"""this creates some fluff""".此外,'可以Shift在我的瑞士德语键盘上键入没有键.

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

  • ```只需要在PC QWERTY键盘上使用shift键.在我的键盘上,```实际上更容易输入. (12认同)
  • 这个答案与python惯例相反; 请参阅PEP 257,其中说:为了保持一致性,请始终在文档字符串中使用""三重双引号""".http://www.python.org/dev/peps/pep-0257/ (10认同)
  • 在我的键盘上"和'都需要换档键. (6认同)
  • 在任何地方使用字符串的简单引号允许我使用三个双引号禁用部分源代码 - 类似'#if 0'和'#endif'. (4认同)
  • 我倾向于使用单引号,因为我每天都编写SQL代码,单引号用于T-SQL中的字符串文字.但我确实使用三重双引号,因为文档字符串有时可能会使用它们. (2认同)

Gar*_*idd 44

我和威尔在一起:

  • 文字的双引号
  • 任何行为类似于标识符的单引号
  • 双引号的原始字符串文字用于regexp
  • 文档字符串的三倍双引号

即使它意味着很多逃避,我也会坚持这一点.

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


Ton*_*yer 26

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

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

我已经在野外看到的Python代码往往倾向于"过度',但幅度不大.一个例外是,"""these"""'''these'''我看到的更常见.


jbl*_*som 21

三重引用的评论是这个问题的一个有趣的副标题.PEP 257指定doc字符串的三重引号.我使用谷歌代码搜索进行了快速检查,发现Python中的三重双引号三重单引号一样受欢迎- 在Google索引代码中,1.3M与131K的出现次数相同.因此,在多行情况下,如果使用三重双引号,您的代码可能会更加熟悉.


Dro*_*ans 13

"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^
Run Code Online (Sandbox Code Playgroud)

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

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

  • '如果你要"引用"某些东西,你肯定会想要使用单引号' (11认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

其中给出了以下输出:

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'
Run Code Online (Sandbox Code Playgroud)

  • 但是``""这是带有"引号"的字符串"""`引发了一个SyntaxError.这种情况怎么可能解决?(与''''相同,这是带'引号''''的字符串) (2认同)