为什么我们在Python 3中有不同的面向字节的字符串表示?单个表示而不是多个表示是否足够?
对于ASCII范围编号打印,字符串显示以\x
开头的序列:
In [56]: chr(128)
Out[56]: '\x80'
在不同的数字范围内,Python使用以\u
In [57]: chr(57344)
Out[57]: '\ue000'
但是最高范围内的数字,即截至目前的最大Unicode数字,它使用前导\U
:
In [58]: chr(1114111)
Out[58]: '\U0010ffff'
答案 0 :(得分:10)
Python为您提供字符串的表示,对于不可打印的字符,将使用最短的可用转义序列。
\x80
与\u0080
或\U00000080
的字符相同,但\x80
只是更短。对于chr(57344)
,最短的符号为\ue000
,您无法使用\xhh
表达相同的字符,该符号仅可用于\0xFF
之前的字符。
对于某些字符,甚至还有单字母转义符,例如换行符为\n
,标签符号为\t
。
出于历史和实际原因,Python有多种表示法选项。在一个字节字符串中,你只能创建0到255范围内的字节,所以\xhh
比你不能在任何地方使用\U000hhhhh
更有帮助,更简洁甚至可以使用该符号的全部范围,\xhh
和\n
以及相关代码对于其他语言的程序员来说都很熟悉。