转载须注明出处:简书@Orca_J35
ord(c)
该函数用于获取 c 的 Unicode 码点,并以整数形式表示。c 表示一个 Unicode 字符,不过由于 Python 的内置类型中并不包含字符类型,所有 c 实际上是一个长度为 1 的字符串,并且其中仅包含一个 Unicode 字符。另外,chr()
与 ord()
的功能正好相反。示例:
>>> ord('鲸')
40120
>>> ord('€')
8364
>>> ord('a')
97
同一码点的不同转义序列('\xhh'
,'\ooo'
,'\uhhhh'
, '\Uhhhhhhhh'
),对 ord
完全等效:
>>> ord('\x61'),ord('\141'),ord('\u0061'),ord('\U00000061'),ord('a')
(97, 97, 97, 97, 97)
'\xhh' 和 '\ooo'
在字符串字面值中,十六进制('\xhh'
)和八进制('\ooo'
)转义序列用于表示指定码点的 Unicode 字符(hh
以十六进制表示指定码点;ooo
以八进制表示指定码点)。也就是说,在字符串字面值中使用这两种转义序列的效果,与直接使用 Unicode 字符完全相同。
对于可见 Unicode 字符,这两种转义序列最终都会以 Unicode 字符表示;对于不可见 Unicode 字符,转义序列的最终表示方式分以下两种情况:
- 如果"不可见字符"拥有独立的转义序列,最终会表示为该独立的转义序列
- 如果没有独立的转义序列,最终会表示为十六进制转义序列
总之,使用十六进制(或八进制)转义序列,与直接使用对应码点的 Unicode 字符完全等效,只是表示方式不一样而已。
# 转义序列与Unicode字符都表示同一对象
>>> '\x61' is '\141' is '\u0061' is 'a'
True
# 对于可见字符,最终都会表示为可见的Unicode字符
>>> '\x61','\141','\u0061','a'
('a', 'a', 'a', 'a')
# 对于拥有独立转义字符的不可见Unicode字符,最终都会表示为独立的转义字符
>>> '\x0a','\012','\u000a','\n'
('\n', '\n', '\n', '\n')
# 对于没有独立转义字符的不可见Unicode字符,最终都会表示为十六进制转义符
>>>>>> '\x01','\001','\u0001'
('\x01', '\x01', '\x01')
'\uhhhh' 和 '\Uhhhhhhhh'
在字符串字面值中,Unicode 转义序列 '\uhhhh'
和 '\Uhhhhhhhh'
用于表示指定码点的 Unicode 字符(hhhh
和 hhhhhhhh
以十六进制表示指定码点,后者表示的码点范围更宽)。也就是说,在字符串字面值中使用 Unicode 转义序列的效果,与直接使用 Unicode 字符完全相同。
对于可见 Unicode 字符,转义序列最终都会以 Unicode 字符表示;对于不可见 Unicode 字符,转义序列的最终表示方式分以下两种情况:
- 如果"不可见字符"拥有独立的转义序列,最终会表示为该独立的转义序列
- 如果没有独立的转义序列,最终会表示为十六进制转义序列
总之,使用 Unicode 转义序列,与直接使用对应码点的 Unicode 字符完全等效(无论是否可见),只是表示方式不一样而已。
# 转义序列与Unicode字符都表示同一对象
>>> '\x61' is '\141' is '\u0061' is '\U00000061' is 'a'
True
# 对于可见字符,最终都会表示为可见的Unicode字符
>>> '\x61','\141','\u0061','\U00000061','a'
('a', 'a', 'a', 'a', 'a')
# 对于拥有独立转义字符的不可见Unicode字符,最终都会表示为独立的转义字符
>>> '\x0a','\012','\u000a','\U0000000a','\n'
('\n', '\n', '\n', '\n', '\n')
# 对于没有独立转义字符的不可见Unicode字符,最终都会表示为十六进制转义符
>>>>>> '\x01','\001','\u0001','\u00000001'
('\x01', '\x01', '\x01', '\x01')
网友评论