根据文档,它们几乎可以互换。在样式上有理由要一个使用另一个吗?

#1 楼

我喜欢在用于插值或自然语言消息的字符串周围使用双引号,对于像符号一样小的字符串使用单引号,但是如果字符串包含引号或者我忘记了,则会违反规则。我对文档字符串使用三重双引号,对正则表达式使用原始字符串文字,即使不需要它们也是如此。

例如:

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


评论


有趣的是,我以完全相同的方式使用它们。我不记得曾经读过任何东西来推动我朝那个方向前进。对于不适合人类使用的长字符串,我也使用三重单引号,例如原始html。也许这与英文报价规则有关。

– Mike A
09-10-21在17:15

大多数python编码器都是以这种方式编码的。没有明确的规则,但是因为我们经常以这种方式阅读代码,所以它成为一种习惯。

– e-satis
10 Mar 8 '10在14:35

我想知道类似符号的事物的单引号实际上是否来自Lisp / Scheme中的引号表达式快捷方式。无论如何,这都是直观的。另外,我的朋友们,如果我们遵循PEP 8样式指南,这些函数实际上应该命名为lights_message()和is_pirate()。

– Yukondude
2010年5月22日17:42

我认为Perl在单引号字符串(无插值)和双引号字符串(带插值)之间进行了区分,并且python编码人员可能已经继承了这种习惯,或者永不放弃。

–达伦·托马斯(Daren Thomas)
2011年5月18日在11:58

我使用相同的约定,另外,我通过使vim突出显示SQL中的三重单引号内的所有内容来滥用它。

– RoundTower
2012年1月16日在22:26

#2 楼

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


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


所以没有区别。相反,人们会告诉您选择与上下文匹配的样式,并保持一致。我同意-补充说,尝试为此类事情提出“惯例”是没有意义的,因为这样只会使任何新来者感到困惑。

评论


是的,对于我来说,一致性是关键,所以我到处都使用单打。更少的按键,明确而一致。

– mlissner
11年8月6日在6:19

#3 楼

我曾经喜欢',尤其是'''docstrings''',因为我发现"""this creates some fluff"""。另外,在我的瑞士德语键盘上也可以在不使用Shift键的情况下键入'

此后,我更改为对"""docstrings"""使用三引号,以符合PEP257。

评论


我倾向于使用单引号,因为我每天都编写SQL代码,并且单引号用于T-SQL中的字符串文字。但是我确实使用三重双引号,因为文档字符串有时可能在其中使用一些绒毛。

– eksortso
2010年5月20日在15:28

在各处使用字符串的简单引号使我可以使用三个双引号来禁用部分源代码,即“ #if 0”和“ #endif”的种类。

–昏暗
2011年1月21日在22:53

“”仅需要在PC QWERTY键盘上使用Shift键。在我的键盘上,“”实际上更易于键入。

– e-satis
2011-10-28 12:49

在我的键盘上”和“都需要使用Shift键。

–LoïcFaure-Lacroix
2012年7月8日在15:54

这个答案与python约定相反;请参阅PEP 257,其中:为了保持一致性,请始终在文档字符串前后使用““”三重双引号“”“。 python.org/dev/peps/pep-0257

–Buttons840
2013年6月10日23:36



#4 楼

我与Will在一起:


文本的双引号
行为类似于标识符的任何内容的单引号
正则表达式的双引号原始字符串文字
文档字符串的三重双引号

即使有很多转义,我也会坚持这样做。

由于引号,我从单引号标识符中获得了最大的价值。其余的做法只是为了给那些单引号标识符留出一定的空间。

#5 楼

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

如果您的代码将被那些使用C / C ++(或者如果您在这些语言和Python之间切换),则对单个字符字符串使用'',对于较长的字符串使用""可能有助于简化过渡。 (就像下面的其他语言一样,它们是不可互换的。)

我在野外看到的Python代码倾向于优先于"而不是',但只是略有增加。从我所看到的情况来看,一个例外是"""these"""'''these'''更常见。

#6 楼

三引号注释是此问题的有趣子主题。 PEP 257指定文档字符串的三引号。我使用Google代码搜索进行了快速检查,发现Python中的三重双引号大约是三重单引号的10倍-在Google索引的代码中出现了130万对131K。因此,在多行情况下,如果使用三重双引号,您的代码可能会变得更加熟悉。

#7 楼

"If you're going to use apostrophes, 
       ^

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


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

说到绒毛,如果您将不得不使用转义字符来表示撇号,那么用'简化字符串文字有什么好处?它会冒犯编码员阅读小说吗?我无法想象高中英语课对你有多痛苦!

评论


“如果要“引用”某些内容,则肯定要使用单引号”

–保罗
2013年9月28日下午16:35

自从我写这篇文章以来,我对此的看法有了很大的变化。现在只是一种情况,我认为我会使用双引号。在使用单引号的情况下,另一个是您的。有关我目前在此问题上的立场,请参阅接受的答案。我认为这是如何将其呈现给广大受众的一个很好的例子。

– Droogans
2013年9月30日15:39

#8 楼

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 2quotes2'
mystringliteral6='this is a string with 7quotes7'

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'
 


评论


但是“”“这是一个带有” quotes“的字符串”“”“引发SyntaxError。如何解决这种情况? (与'''''相同,这是一个带有'quotes'''的字符串)

–dolma33
2012年3月15日17:54



在“引号”和“””之间插入换行符

–尼古拉斯(Nicolas)
2012年5月16日13:12

@ dolma33 Nicolas的建议将更改字符串的内容。一个更好的解决方案已经在答案中:如果您的字符串以某种形式的引号结尾,请使用另一种三重引号。例如,“''''这是一个带有“引号”的字符串。

– jpmc26
2014年3月17日23:13

#9 楼

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

我想您也很希望在嵌入式文本字符串中使用撇号,而不是想要双引号。

#10 楼

我个人坚持一个或另一个。没关系提供您自己的意思来引用任何一种方式只是在您进行协作时混淆其他人。

#11 楼

风格上的偏爱可能比什么都重要。我刚刚检查了PEP 8,却没有提到单引号和双引号。

我更喜欢单引号,因为它只有一个击键而不是两个击键。也就是说,我不必混用Shift键即可制作单引号。

评论


PEP 8在“文档字符串”下的第一句话中链接到PEP 257。在PEP 257中声明:为了保持一致性,请始终在文档字符串前后使用““”三重双引号“”“。如果您在文档字符串中使用任何反斜杠,请使用r“”“原始三重双引号”“”。对于Unicode文档字符串,请使用u“”“ Unicode三引号字符串”“”。尽管如此,我还是喜欢单引号的简洁外观以及您给出的一个按键原因。

– maxpolk
2013年9月21日在17:45

#12 楼


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


PHP与Perl的区别相同:单引号中的内容将不会被解释(甚至不会转换\ n),而双引号中可能包含变量以显示其值。

评论


为了加强您所说的内容,\ n仅在PHP和Perl中用双引号解释,而在Python中则可以在双引号和单引号中使用

– stivlo
2012年6月6日19:27

@stivlo:除非您要通过在字符串文字前添加r来从中获取原始字符串。因此,打印'a \ nb'将打印您两行,但打印r'a \ nb'将打印您一行。

–塔德克
2012年11月11日4:25

#13 楼

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

#14 楼

我只是想用当时能打动我的东西;

当然,在引用引号字符时,毕竟在两者之间切换可能不是那么古怪的事。

#15 楼

您的团队的口味或项目的编码准则。

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

#16 楼

据我所知没有。尽管如果看一些代码,“”通常用于文本字符串(我猜想'在文本内部比'更为常见),并且''出现在哈希键之类的东西中。

#17 楼

我的目标是尽量减少像素和惊喜。我通常更喜欢'以便最小化像素,但是如果字符串中带有撇号,则我最好选择"再次最小化像素。但是,对于文档字符串,我更喜欢""",而不是''',因为后者是非标准的,不常见的,因此令人惊讶。如果现在我有一堆字符串,按照上述逻辑在其中使用了",但是还有一个可以避免使用'的字符串,那么我仍然可以在其中使用"来保持一致性,只是为了最大程度地减少意外。

也许可以通过以下方式来考虑像素最小化原理。您希望英语字符看起来像A B C还是AA BB CC吗?后一种选择浪费了50%的非空像素。

#18 楼

我使用双引号,是因为除Bash之外,大多数语言(C ++,Java,VB等)已经使用了多年,因为我还在普通文本中使用双引号,并且因为我使用的是(经过修改的)非英语键盘,两个字符都需要使用Shift键。

#19 楼

' = "

/ = \ = \

示例:

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'来做到这一点。就Windows中的路径而言,正斜杠的解释方式相同。显然,字符串本身是不同的。我不保证会在外部设备上以这种方式处理它们。

评论


这太老了,但是我还是想指出一点,指出使用正斜杠可能适用于Windows,但仍然依赖于系统。为了确保您没有os依赖项,请使用os.path.join()

–亚当·史密斯(Adam Smith)
2013年12月16日23:38