在Python原始字符串的上下文中
我的Python版本是:在Python原始字符串的上下文中,python,string,rawstring,Python,String,Rawstring,我的Python版本是: ~$ python --version Python 2.6.6 我用Python尝试了以下内容(我想全部展示): 1:\用作转义序列 >>> str('Let\'s Python') "Let's Python" 2:\用作转义序列 >>> 'Let\'s Python' "Let's Python" 3:str()并以值而非类型打印 >>> print 'Let\
~$ python --version
Python 2.6.6
我用Python尝试了以下内容(我想全部展示):
1:\
用作转义序列
>>> str('Let\'s Python')
"Let's Python"
2:\
用作转义序列
>>> 'Let\'s Python'
"Let's Python"
3:str()
并以值而非类型打印
>>> print 'Let\'s Python'
Let's Python
4:它是一个原始字符串
>>> repr('Let\'s Python')
'"Let\'s Python"'
>>> print r'Let\'s Python'
Let\'s Python
[问题]
5:Python原始字符串
>>> repr('Let\'s Python')
'"Let\'s Python"'
>>> print r'Let\'s Python'
Let\'s Python
6:这一点,我不明白以下几点:
>>> r'Let\'s Python'
"Let\\'s Python"
>>> r'\\'
'\\\\'
为什么\\
?为什么5
和6
中的输出不同?r
和repr()
是相同的还是不同的?另外,请解释
字符串
和原始字符串
的内部表示相同或不同 您将原始字符串文本r'
与字符串表示混淆。这有很大的区别repr()
和r''
不是一回事
r'
原始字符串文字与普通字符串文字一样生成字符串,但它处理转义码的方式除外。生成的结果仍然是一个python字符串。可以使用原始字符串文字或普通字符串文字生成相同的字符串:
>>> r'String with \n escape ignored'
'String with \\n escape ignored'
>>> 'String with \\n escape ignored'
'String with \\n escape ignored'
当不使用r''
原始字符串文字时,我必须将斜杠加倍以转义它,否则它将被解释为换行符。在使用r''
语法时,我不必转义它,因为它根本不解释转义代码,例如\n
。结果python字符串值的输出完全相同:
>>> r'String with \n escape ignored' == 'String with \\n escape ignored'
True
解释器正在使用repr()
将这些值返回给我们;生成python值的表示形式:
>>> print 'String'
String
>>> print repr('String')
'String'
>>> 'String'
'String'
>>> repr('String')
"'String'"
请注意repr()
结果如何包含引号。当我们只回显字符串的repr()
时,结果本身就是一个字符串,因此它有两组引号。另一个“
引号标记repr()
结果的开始和结束,其中包含python字符串字符串的字符串表示形式
因此,r'
是生成python字符串的语法,repr()
是生成表示python值的字符串的方法。repr()
也适用于其他python值:
>>> print repr(1)
1
>>> repr(1)
'1'
1
整数表示为字符串'1'
(字符串中的字符1
).谢谢Martijn!…虽然我仍然不明白为什么打印忽略转义的r'字符串
打印忽略转义的r'字符串单个``,@GrijeshChauhan:现在在不使用r
的情况下尝试一下(不要更改任何其他内容)。这个\n
变成了一个换行符。另一个区别是:len(r'\n')
和len('\n')
。第一个是两个字符,一个是\
反斜杠和一个n
,另一个是一个字符,换行符。谢谢@MartijnPieters。有没有原始报告(r“太多\\”)
将参数打印回完全相同的函数,包括r'前缀?输出或
repr()`不可读。len()
和binascii
解决方法一点也不有趣。@MarcH不,没有。只有一个规范表示法。