为什么 Python 根据内容使用不同的引号来表示字符串?
Why does Python use different quotes for representing strings depending on their content?
在 Python 2.7 中,我注意到 repr(s)
(s
是一个字符串)行为因 s
的内容而异。
我的意思是:
In [1]: print repr("John's brother")
"John's brother"
In [2]: print repr("system")
'system'
请注意两种情况下的不同引号类型。
从我的测试看来,每当 s
包含一个 '
字符时,表示的字符串都会用 "
引用 除非 字符串还包含一个(转义的)"
字符。
这是我的意思的一个例子:
In [3]: print repr("foo")
'foo'
In [4]: print repr("foo'")
"foo'"
In [5]: print repr("foo'\"")
'foo\'"'
现在我明白这没有什么区别,因为 repr
不提供任何关于确切输出格式的保证,但我很好奇 Python 开发人员为什么决定这些事情:
- 为什么有两种引用字符串的方式?
- 为什么要考虑表示包含引号的字符串的特定逻辑?毕竟它让
doctests
这样的东西更难写。
Python 尝试给出它正在 repr
-ing 的字符串的最多 "natural" 表示。
因此,例如,如果字符串包含 '
,它将使用 "
,因为 "that's the ticket"
看起来比 'that\'s the ticket'
更好。
实际上有四种引用字符串的方法:单引号——'
和"
——以及三引号——"""
和'''
。之所以有这四种方法,是因为能够自然地编写字符串而无需转义其中的内容会更好。
在 Python 2.7 中,我注意到 repr(s)
(s
是一个字符串)行为因 s
的内容而异。
我的意思是:
In [1]: print repr("John's brother")
"John's brother"
In [2]: print repr("system")
'system'
请注意两种情况下的不同引号类型。
从我的测试看来,每当 s
包含一个 '
字符时,表示的字符串都会用 "
引用 除非 字符串还包含一个(转义的)"
字符。
这是我的意思的一个例子:
In [3]: print repr("foo")
'foo'
In [4]: print repr("foo'")
"foo'"
In [5]: print repr("foo'\"")
'foo\'"'
现在我明白这没有什么区别,因为 repr
不提供任何关于确切输出格式的保证,但我很好奇 Python 开发人员为什么决定这些事情:
- 为什么有两种引用字符串的方式?
- 为什么要考虑表示包含引号的字符串的特定逻辑?毕竟它让
doctests
这样的东西更难写。
Python 尝试给出它正在 repr
-ing 的字符串的最多 "natural" 表示。
因此,例如,如果字符串包含 '
,它将使用 "
,因为 "that's the ticket"
看起来比 'that\'s the ticket'
更好。
实际上有四种引用字符串的方法:单引号——'
和"
——以及三引号——"""
和'''
。之所以有这四种方法,是因为能够自然地编写字符串而无需转义其中的内容会更好。