Python chr() 函数(快速上手)

Python chr() 函数详解:从数字到字符的魔法转换

你有没有遇到过这样的场景?在处理文本数据时,需要把一个数字变成对应的字符,比如把数字 65 转换成字母 A?这时候,Python 的 chr() 函数就像一把神奇的钥匙,能帮你轻松完成这个转换。

Python chr() 函数 是 Python 内置函数之一,它的作用是根据 Unicode 码点(即数字)返回对应的字符。换句话说,它是一个“数字 → 字符”的映射工具。这个函数在编码处理、字符生成、加密算法、文本分析等场景中非常实用。

想象一下,Unicode 就像一个巨大的字符图书馆,每本书(字符)都有一个唯一的编号(码点)。而 chr() 函数就是那个帮你根据编号快速找到对应书籍的图书管理员。


基本语法与返回值解析

chr() 函数的语法非常简洁:

chr(number)
  • number:一个整数,表示 Unicode 码点,范围必须在 0 到 1114111(即 0x10FFFF)之间。
  • 返回值:一个字符串,表示该码点对应的单个字符。

⚠️ 注意:chr() 只能返回一个字符,且输入必须是整数,不能是浮点数或字符串。

一个简单的例子

print(chr(65))  # 输出: A
  • 65 是大写字母 A 在 ASCII 编码中的码点。
  • chr(65) 返回字符 'A'

这个函数的返回值永远是一个长度为 1 的字符串,即使你传入的是一个很大的数字。


常见应用场景:从基础到进阶

生成字母表序列

在编程中,我们经常需要生成 A 到 Z 或 a 到 z 的字母序列。使用 chr() 配合 range() 可以轻松实现。

uppercase_letters = [chr(i) for i in range(65, 91)]
print(uppercase_letters)

lowercase_letters = [chr(i) for i in range(97, 123)]
print(lowercase_letters)
  • range(65, 91) 生成从 65 到 90 的整数(包含 65,不包含 91)。
  • chr(65) → 'A',chr(66) → 'B',依此类推。
  • 通过列表推导式,我们快速构建了完整的字母表。

字符与码点的双向转换

chr()ord() 是一对“镜像”函数:chr() 是“码点 → 字符”,而 ord() 是“字符 → 码点”。

char = 'X'
code_point = ord(char)
print(f"字符 '{char}' 的码点是: {code_point}")  # 输出: 88

print(f"码点 {code_point} 对应的字符是: {chr(code_point)}")  # 输出: X

这个双向转换能力在文本分析、字符校验、密码学中特别有用。


处理中文与特殊字符

Python chr() 函数不仅支持英文字母,还能处理中文、表情符号、数学符号等。

中文字符的码点转换

中文字符在 Unicode 中有独立的码点。例如:

hanzi_list = [chr(i) for i in range(0x4E00, 0x4E52)]  # 从 19968 到 20050
print(''.join(hanzi_list))
  • 0x4E00 是汉字“一”的起始码点。
  • 0x4E52 是“与”的码点。
  • 这段代码生成了从“一”到“与”的连续汉字。

💡 小贴士:在 Python 中,十六进制写法以 0x 开头,比如 0x4E00 表示十进制的 19968。

表情符号的生成

Emoji 也是 Unicode 的一部分,可以用 chr() 生成:

emojis = [
    chr(0x1F600),  # 😄
    chr(0x1F602),  # 😂
    chr(0x1F603),  # 😃
    chr(0x1F604),  # 😄
    chr(0x1F605),  # 😅
]

print("表情符号列表:", ''.join(emojis))

这些代码虽然看起来像“乱码”,但它们在支持 Unicode 的终端中会正确显示为表情。


错误处理与边界情况

chr() 函数对输入有严格限制,超出范围会抛出异常。

超出范围的错误

try:
    print(chr(1114112))  # 最大码点是 1114111
except ValueError as e:
    print(f"错误: {e}")
  • Unicode 最大码点是 1114111(即 0x10FFFF)。
  • 任何大于或等于 1114112 的数字都会导致 ValueError

非整数输入报错

try:
    print(chr(65.5))
except TypeError as e:
    print(f"错误: {e}")
  • chr() 要求参数必须是整数类型。
  • 浮点数必须先转换为整数,如 int(65.5)

实际项目案例:简易字符编码器

我们来做一个小工具:把一句话转换为对应的码点列表,再还原回来。

def text_to_codes(text):
    """将字符串转换为码点列表"""
    return [ord(char) for char in text]

def codes_to_text(codes):
    """将码点列表转换回字符串"""
    return ''.join(chr(code) for code in codes)

original_text = "Hello, 世界!"
codes = text_to_codes(original_text)
print("原始文本:", original_text)
print("码点列表:", codes)

recovered_text = codes_to_text(codes)
print("还原文本:", recovered_text)

输出结果:

原始文本: Hello, 世界!
码点列表: [72, 101, 108, 108, 111, 44, 32, 19990, 30028, 65281]
还原文本: Hello, 世界!
  • 这个例子展示了 chr() 在数据编码与还原中的实际用途。
  • 可以用于简单的数据混淆、日志记录、调试等场景。

总结与学习建议

Python chr() 函数 是一个看似简单却功能强大的工具。它帮助我们理解字符背后的数字表示,是连接“字符”与“编码”的桥梁。

  • 它适用于任何 Unicode 字符,包括英文字母、中文、表情符号等。
  • ord() 配合使用,可实现字符与码点的双向转换。
  • 在生成字符序列、文本处理、编码实验中非常实用。

学习建议

  1. 动手尝试:不要只看代码,自己运行一遍,观察输出。
  2. 探索码点范围:尝试 chr(0)chr(127),看看 ASCII 字符的分布。
  3. 结合 ord():多练习“字符 ↔ 码点”互转,加深理解。
  4. 关注 Unicode 标准:了解不同语言字符的码点分布,有助于处理多语言文本。

最后提醒一句:Python chr() 函数 不仅是语法知识,更是一种思维方式——学会从数字看世界,是编程进阶的重要一步。

掌握它,你就能在字符串处理的世界里游刃有余。