根据文档,它们几乎可以互换。是否有一种风格上的理由使用其中一种?
答案 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在一起:
即使这意味着很多逃避,我也会坚持下去。
由于引号,我从单引号标识符中获得最大价值。其余的做法只是为那些单引号标识符提供一些常设空间。
答案 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 Python与triple 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 C
或AA 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中的路径而言,正斜杠的解释方式相同。显然,字符串本身是不同的。我不保证它们会在外部设备上以这种方式处理。