ascii() <Python 内置函数>

转载须注明出处:简书@Orca_J35 | GitHub@orca-j35

ascii(object)

类似于 repr(),该函数也会返回一个用于描述 object 的字符串。与 repr() 的不同之处在于,ascii() 在获取 __repr__() 的返回值之后,会使用转义序列 (\x, \u , \U) 来表示其中的非 ASCII 码字符。ascii() 返回的字符串类似于 Python 2 中的 repr() 函数返回的字符串。

class Cls:
    def __repr__(self):
        # ascii与repr都会使用__repr__,
        # 但ascii会转义其中的非ASCII字符
        return "调用__repr__"

    def __str__(self):
        # ascii不使用__str__
        return "调用__str__"


a_cls = Cls()
print("repr 的返回值:{0}".format(repr(a_cls)))
print("ascii的返回值:{0}".format(ascii(a_cls)))

输出

repr 的返回值:调用__repr__
ascii的返回值:\u8c03\u7528__repr__

如何转义非 ASCII 码字符?

首先,补充一点有关 Unicode 的知识:每个 Unicode 字符都有一个指定的代码点(code point),在 Unicode 字符集中一般表示为 U+XXXX ,其中 XXXX 是由 4 个或更多个16进制数字表示的序列。在 Python 3 中:\u 转义序列用于插入码点范围在 U+0000 ~ U+FFFF 之间的 Unicode 字符。\U 转义序列用于插入码点范围在 U+10000 及以上的字符。

ascii() 会将非 ASCII 码字符以 Unicode 转义序列表示:

  • \xhh 转义序列用于表示码点范围在U+007F ~ U+00FF 之间的 Unicode 字符。
  • \uxxxx 转义序列用于表示码点范围在U+0100 ~ U+FFFF 之间的 Unicode 字符。
  • \Uxxxxxxxx 转义序列用于表示码点范围在 U+10000 及以上的字符。

另外, U+0000 ~ U+007E 对应 ASCII 码。

示例代码:

print(ascii('µ')) # U+007F ~ U+00FF
print(ascii('鲸')) # U+0100 ~ U+FFFF 
print(ascii("😊")) # U+10000

输出:

'\xb5'
'\u9cb8'
'\U0001f60a'

最后在对比一下 repr()

print(repr('µ'))
print(repr('鲸'))
print(repr("😊"))

输出:

'µ'
'鲸'
'😊'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容