为什么Python的交互式解释器有时会输出转义字符?
Why is the escape character sometimes output in the interactive interpreter of Python?
如果我在 Python 的交互式解释器中输入:
>>> 'doesn\'t'
"doesn't"
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
为什么第二种情况打印的是转义符(\
)?我意识到我可以使用 print()
函数来转义它,即不打印它。
单引号需要转义,因为字符串是用单引号分隔的。如果它没有被转义,那么它会发出文字结束的信号。
'"Isn\'t," they said.'
^ ^
如果字符串是在外面用双引号复制的,那么双引号就需要转义:
"\"Isn't,\" they said."
两种形式代表完全相同的字符串。恰好,repr()
选择使用单引号,并以第一种方式显示。
我想以 John 的有用回答为基础。
在 examining the docs, 之后,我确定如果字符串通过双引号测试,它将输出双引号:
- 包含单引号
- 不包含双引号
这是最容易记住的方式。
文字 "doesn't"
由于撇号而通过了第一个测试,撇号算作单引号。然后,我们重新检查它,发现它不包含任何封闭内部的双引号。因此,字符串文字输出为双引号:
>>> "doesn't"
"doesn't"
输出中不需要用反斜杠转义单引号,因为括号是由双引号组成的!
现在考虑文字 '"Isn\'t," they said.'
这个文字通过了第一个测试,因为它包含一个撇号,即使它被转义了。但是,它还包含双引号,因此无法通过第二个测试。因此,它输出为单引号:
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
并且由于括号由单引号组成,所以输出中需要转义。
如果输出中没有反斜杠,扫描文字时就会到达 EOL(行尾)。
最后,考虑"\"Isn't,\" they said."
文字中有一个单引号,所以它通过了第一个测试...但没有通过第二个。输出应将字符串文字括在单引号中:
>>> "\"Isn't,\" they said."
'"Isn\'t," they said.'
因此,需要转义以防止过早的 EOL。
如果我在 Python 的交互式解释器中输入:
>>> 'doesn\'t'
"doesn't"
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
为什么第二种情况打印的是转义符(\
)?我意识到我可以使用 print()
函数来转义它,即不打印它。
单引号需要转义,因为字符串是用单引号分隔的。如果它没有被转义,那么它会发出文字结束的信号。
'"Isn\'t," they said.'
^ ^
如果字符串是在外面用双引号复制的,那么双引号就需要转义:
"\"Isn't,\" they said."
两种形式代表完全相同的字符串。恰好,repr()
选择使用单引号,并以第一种方式显示。
我想以 John 的有用回答为基础。
在 examining the docs, 之后,我确定如果字符串通过双引号测试,它将输出双引号:
- 包含单引号
- 不包含双引号
这是最容易记住的方式。
文字 "doesn't"
由于撇号而通过了第一个测试,撇号算作单引号。然后,我们重新检查它,发现它不包含任何封闭内部的双引号。因此,字符串文字输出为双引号:
>>> "doesn't"
"doesn't"
输出中不需要用反斜杠转义单引号,因为括号是由双引号组成的!
现在考虑文字 '"Isn\'t," they said.'
这个文字通过了第一个测试,因为它包含一个撇号,即使它被转义了。但是,它还包含双引号,因此无法通过第二个测试。因此,它输出为单引号:
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
并且由于括号由单引号组成,所以输出中需要转义。
如果输出中没有反斜杠,扫描文字时就会到达 EOL(行尾)。
最后,考虑"\"Isn't,\" they said."
文字中有一个单引号,所以它通过了第一个测试...但没有通过第二个。输出应将字符串文字括在单引号中:
>>> "\"Isn't,\" they said."
'"Isn\'t," they said.'
因此,需要转义以防止过早的 EOL。