根据文档,它们几乎可以互换.是否有风格上的理由使用一个而不是另一个?
我喜欢在用于插值的字符串周围使用双引号或者是自然语言消息,对于类似小符号的字符串使用单引号,但如果字符串包含引号,或者如果我忘记,则会破坏规则.我对正则表达式使用三重双引号用于文档字符串和原始字符串文字,即使它们不需要也是如此.
例如:
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
在https://docs.python.org/2.0/ref/strings.html上引用官方文档:
用简单的英语:字符串文字可以用匹配的单引号(')或双引号(")括起来.
所以没有区别.相反,人们会告诉您选择与上下文匹配的风格,并保持一致.我同意 - 并补充说,尝试为这类事情提出"惯例"是没有意义的,因为你最终会混淆任何新人.
我以前更喜欢'
,特别是'''docstrings'''
因为我发现"""this creates some fluff"""
.此外,'
可以Shift在我的瑞士德语键盘上键入没有键.
我已经改为使用三重引号"""docstrings"""
,以符合PEP 257.
我和威尔在一起:
文字的双引号
任何行为类似于标识符的单引号
双引号的原始字符串文字用于regexp
文档字符串的三倍双引号
即使它意味着很多逃避,我也会坚持这一点.
由于引号,我从单引号标识符中获得最大价值.其余的做法只是为那些单引号标识符提供一些常设空间.
如果您拥有的字符串包含一个,那么您应该使用另一个.例如"You're able to do this"
,或'He said "Hi!"'
.除此之外,您应该尽可能地保持一致(在模块内,在包内,在项目内,在组织内).
如果您的代码将由使用C/C++的人阅读(或者如果您在这些语言和Python之间切换),那么使用''
单字符字符串和""
更长的字符串可能有助于简化过渡.(同样地遵循其他不可互换的语言).
我已经在野外看到的Python代码往往倾向于"
过度'
,但幅度不大.一个例外是,"""these"""
比'''these'''
我看到的更常见.
三重引用的评论是这个问题的一个有趣的副标题.PEP 257指定doc字符串的三重引号.我使用谷歌代码搜索进行了快速检查,发现Python中的三重双引号与三重单引号一样受欢迎- 在Google索引代码中,1.3M与131K的出现次数相同.因此,在多行情况下,如果使用三重双引号,您的代码可能会更加熟悉.
"If you're going to use apostrophes, ^ you'll definitely want to use double quotes". ^
出于这个简单的原因,我总是在外面使用双引号.总是
说到绒毛,如果你将不得不使用转义字符来表示撇号,那么简化你的字符串文字有什么用呢?是否冒犯了编写小说的程序员?我无法想象高中英语课对你来说是多么痛苦!
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'