Emi*_*nov 59
结果'\\&'仅显示 - 实际上字符串是\&:
>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&
Run Code Online (Sandbox Code Playgroud)
在shell中试一试.
Tho*_*mas 24
实际上没有添加额外的反斜杠; 它只是由repr()函数添加,表明它是一个字面反斜杠.当需要打印表达式的结果时,Python解释器使用repr()函数(调用__repr__()对象):
>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 19
Python \以特殊方式处理文字字符串.
这样你可以键入'\n'表示换行符或'\t'表示选项卡
因为'\&'对Python没有任何特殊意义,而不是导致错误,Python词法分析器会隐式地\为你添加额外的内容.
真的最好用\\&或r'\&'代替'\&'
在r这里是指原始字符串,这意味着\不经过特殊处理的,除非它是在字符串的开头引号字符之前.
在交互式控制台中,Python用于repr显示结果,因此这就是您看到双重'\'的原因.如果你print的字符串或使用len(string)你将看到它实际上只有2个字符
一些例子
>>> 'Here\'s a backslash: \\'
"Here's a backslash: \\"
>>> print 'Here\'s a backslash: \\'
Here's a backslash: \
>>> 'Here\'s a backslash: \\. Here\'s a double quote: ".'
'Here\'s a backslash: \\. Here\'s a double quote: ".'
>>> print 'Here\'s a backslash: \\. Here\'s a double quote: ".'
Here's a backslash: \. Here's a double quote ".
Run Code Online (Sandbox Code Playgroud)
澄清彼得在评论中提出的观点,请看这个链接
与标准C不同,所有未识别的转义序列都保留在字符串中不变,即反斜杠保留在字符串中.(调试时此行为很有用:如果转义序列输入错误,则生成的输出更容易被识别为已损坏.)请注意,上表中标记为"(仅限Unicode)"的转义序列属于非Unicode字符串文字的无法识别的转义类别.
>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&
Run Code Online (Sandbox Code Playgroud)
换句话说:'\\&'只包含一个反斜杠.为了清晰起见,它只是在python shell的输出中转义.
打印列表也会导致此问题(即时消息是python中的新增功能,因此也让我有些困惑):
>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\
Run Code Online (Sandbox Code Playgroud)
类似地:
>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&
Run Code Online (Sandbox Code Playgroud)
没有多余的反斜杠,它只是在交互式环境中以这种方式格式化。尝试:
print string
Run Code Online (Sandbox Code Playgroud)
然后您可以看到确实没有多余的反斜杠。
| 归档时间: |
|
| 查看次数: |
95688 次 |
| 最近记录: |