单引号 vs 单引号Python 中的双引号[关闭]
-
09-06-2019 - |
题
根据文档,它们几乎可以互换。是否存在使用其中一种而不使用另一种的风格原因?
解决方案
我喜欢在用于插值或自然语言消息的字符串周围使用双引号,并在类似符号的小字符串中使用单引号,但如果字符串包含引号,或者如果我忘记了,则会违反规则。我对文档字符串使用三个双引号,对正则表达式使用原始字符串文字,即使不需要它们。
例如:
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"""
. 。还, '
无需键入即可 转移 我的瑞士德语键盘上的键。
从那以后我改用三引号 """docstrings"""
, 符合 公众号 257.
我和威尔在一起:
- 文本双引号
- 单引号用于任何行为类似于标识符的内容
- 正则表达式的双引号原始字符串文字
- 文档字符串的三重双引号
我会坚持下去,即使这意味着很多逃避。
由于引号,我从突出的单引号标识符中获得了最大的价值。其余的做法只是为了给那些单引号标识符一些站立的空间。
如果您拥有的字符串包含一个,那么您应该使用另一个。例如, "You're able to do this"
, , 或者 'He said "Hi!"'
. 。除此之外,您应该尽可能保持一致(在模块内、包内、项目内、组织内)。
如果您的代码将由使用 C/C++ 的人员阅读(或者如果您在这些语言和 Python 之间切换),那么使用 ''
对于单字符字符串,以及 ""
更长的字符串可能有助于缓解过渡。(对于遵循其他不可互换的语言也是如此)。
我在野外看到的 Python 代码往往更受青睐 "
超过 '
, ,但只是轻微的。唯一的例外是 """these"""
比 '''these'''
, ,据我所见。
三重引用的评论是这个问题的一个有趣的子主题。 PEP 257 指定文档字符串的三引号. 。我使用 Google 代码搜索进行了快速检查,发现 Python 中的三个双引号 受欢迎程度约为 三重单引号 -- Google 索引代码中的出现次数为 130 万次与 13.1 万次。因此,在多行情况下,如果您的代码使用三重双引号,人们可能会更熟悉它。
"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'
我一般使用双引号,但没有任何特定原因 - 可能只是出于 Java 的习惯。
我想您也更有可能希望在内联文字字符串中使用撇号而不是双引号。
就我个人而言,我坚持其中之一。没关系。为任何引用提供您自己的含义只会在您合作时让其他人感到困惑。
这可能是一种风格偏好。我刚刚检查了 PEP 8,没有看到任何提及单引号和双引号的内容。
我更喜欢单引号,因为它只需击键一次而不是两次。也就是说,我不必组合 Shift 键来制作单引号。
在 Perl 中,当您有一个不需要插入变量或转义字符(如 、 、 等)的字符串时,您希望使用单引号。
PHP 与 Perl 具有相同的区别:单引号中的内容不会被解释(甚至 也不会被转换),与双引号相反,双引号可以包含变量以打印出其值。
恐怕 Python 不会。从技术上讲,Python 中没有 $ 标记(或类似的标记)来将名称/文本与变量分开。毕竟,这两个功能都使 Python 更具可读性,更少混乱。单引号和双引号在 Python 中可以互换使用。
我选择使用双引号是因为它们更容易看到。
我只是用当时我喜欢的任何东西;可以随心所欲地在两者之间切换,很方便!
当然,在引用引号字符时,两者之间的切换可能并不是那么异想天开……
您团队的品味或项目的编码指南。
例如,如果您处于多语言环境中,您可能希望鼓励对其他语言使用的字符串使用相同类型的引号。另外,我个人最喜欢'
据我所知没有。虽然如果你看一些代码,“”通常用于文本字符串(我猜'在文本中比“更常见),并且''出现在哈希键和类似的东西中。
我的目标是尽量减少像素和惊喜。我通常更喜欢 '
为了最小化像素,但是 "
相反,如果字符串有撇号,则再次最小化像素。然而,对于文档字符串,我更喜欢 """
超过 '''
因为后者是非标准的、不常见的,因此令人惊讶。如果现在我有一堆我用过的字符串 "
根据上述逻辑,但也可以逃脱 '
, ,我可能还会用 "
这样做是为了保持一致性,只是为了尽量减少意外。
也许以下面的方式思考像素最小化哲学会有所帮助。你希望英文字符看起来像 A B C
或者 AA BB CC
?后一种选择浪费了 50% 的非空像素。
我使用双引号是因为我多年来一直在除 Bash 之外的大多数语言(C++、Java、VB…)中这样做,因为我也在普通文本中使用双引号,并且因为我使用的是(修改后的)非英语键盘,其中两个字符都需要 Shift 键。
'
= "
/
= \
= \\
例子 :
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 中的路径而言,正斜杠的解释方式相同。显然字符串本身是不同的。但我不能保证它们在外部设备上以这种方式处理。