Python3 chr() 函数(保姆级教程)

Python3 chr() 函数:从数字到字符的魔法转换

在 Python 编程中,处理文本和字符编码是日常任务的一部分。而 chr() 函数,就是实现数字与字符之间“魔法转换”的关键工具。它能将一个整数(代表 Unicode 码点)转换为对应的字符。比如,输入数字 65,chr(65) 就会返回字符 'A'。这个函数虽然简单,但在字符串处理、编码分析、密码学、字符验证等场景中非常实用。

如果你刚开始接触 Python,或者对字符编码机制感到困惑,那么这篇教程将带你一步步理解 chr() 函数的原理与用法。我们不会跳过细节,也不会堆砌术语,而是通过一个个清晰的示例,让你真正“看懂”它。


chr() 函数的基本语法与返回值

chr() 是 Python 内置函数,语法非常简单:

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

📌 注意:如果传入的数字超出合法范围,会抛出 ValueError 异常。

举个最基础的例子:

char = chr(65)
print(char)  # 输出: A

中文注释

  • 65 是大写字母 'A' 在 Unicode 中的码点值。
  • chr(65) 就是将这个数字“翻译”成对应的字符。
  • print 输出结果,可以看到确实是 'A'。

再看几个常见字符的转换:

print(chr(97))  # 输出: a (小写 a)
print(chr(48))  # 输出: 0 (数字 0)
print(chr(33))  # 输出: ! (感叹号)

这里你可能会注意到:数字、字母、符号在计算机中其实都只是一个个数字。chr() 就是把这些“数字”还原成我们看得懂的“字符”。


与 ord() 函数的互逆关系

在学习 chr() 时,必须了解它的“搭档”函数:ord()。这两个函数构成了字符与数字之间的双向桥梁。

  • chr(n):数字 → 字符
  • ord(c):字符 → 数字

这就像一把钥匙和锁的关系:一个打开,一个关闭。

char = 'B'
code = ord(char)      # 将字符转为码点
print(f"字符 {char} 对应的码点是: {code}")  # 输出: 字符 B 对应的码点是: 66

recovered_char = chr(code)
print(f"码点 {code} 对应的字符是: {recovered_char}")  # 输出: 码点 66 对应的字符是: B

中文注释

  • ord('B') 返回 66,因为 'B' 在 Unicode 中的码点是 66。
  • chr(66) 再次还原出 'B'。
  • 这说明 chr(ord(c)) == c,在合法范围内总是成立。

⚠️ 小提醒:chr()ord() 仅在合法码点范围内有效。超出范围会报错。


实际应用场景:生成字母表与密码字符

chr() 函数在实际开发中非常实用。比如你想生成从 A 到 Z 的大写字母表,或者从 a 到 z 的小写字母表,用 chr() 配合 range() 轻松搞定。

生成大写字母 A-Z

uppercase_letters = []
for i in range(65, 91):  # 65 是 'A',90 是 'Z'
    uppercase_letters.append(chr(i))

print(''.join(uppercase_letters))  # 输出: ABCDEFGHIJKLMNOPQRSTUVWXYZ

中文注释

  • range(65, 91) 生成从 65 到 90 的整数(含 65,不含 91)。
  • 每个数字都通过 chr() 转为对应字符。
  • 最后用 join() 合并为一个字符串。

生成小写字母 a-z

lowercase_letters = [chr(i) for i in range(97, 123)]
print(''.join(lowercase_letters))  # 输出: abcdefghijklmnopqrstuvwxyz

中文注释

  • range(97, 123) 覆盖小写字母的码点范围(a=97,z=122)。
  • 使用列表推导式写法更简洁。
  • join() 将列表合并为字符串。

处理特殊字符与 Unicode 编码

chr() 不仅能处理英文字母和数字,还能处理中文、emoji、符号等复杂字符。这是因为 Python 支持完整的 Unicode 编码标准。

中文字符的转换

chinese_char = chr(20013)  # 20013 是“中”字的 Unicode 码点
print(chinese_char)  # 输出: 中

中文注释

  • “中”字在 Unicode 中的码点是 20013(十进制)。
  • chr(20013) 成功返回“中”字。
  • 这说明 chr() 能处理中文、日文、韩文等多语言字符。

Emoji 表情符号

smile = chr(128512)  # 😂 的码点
heart = chr(10084)   # ❤ 的码点
print(smile)  # 输出: 😂
print(heart)  # 输出: ❤

中文注释

  • emoji 也是 Unicode 字符,每个表情都有唯一码点。
  • 这里 128512 是“大笑”表情的码点。
  • 通过 chr() 可以动态生成 emoji,用于提示信息、表情包系统等。

错误处理与边界情况

虽然 chr() 很强大,但必须注意其限制范围。超出范围会抛出异常,需要合理处理。

超出范围的示例

try:
    chr(1114112)  # 最大合法码点是 1114111
except ValueError as e:
    print(f"错误: {e}")  # 输出: 错误: chr() arg not in range(0x110000)

中文注释

  • Unicode 最大码点是 1114111(即 0x10FFFF),超过就无效。
  • chr() 会抛出 ValueError,所以建议在使用前验证输入合法性。

负数输入

try:
    chr(-1)
except ValueError as e:
    print(f"错误: {e}")  # 输出: 错误: chr() arg not in range(0x110000)

中文注释

  • 负数没有对应的字符,chr() 不接受负数。
  • 所有输入必须是 0 到 1114111 之间的整数。

与其他函数的组合使用:字符串加密与编码分析

chr() 常用于简单的字符编码或加密逻辑。比如凯撒密码(Caesar Cipher)就是基于字符码点的偏移。

简单的凯撒密码加密

def caesar_encrypt(text, shift):
    encrypted = ""
    for char in text:
        # 获取字符的码点
        code = ord(char)
        # 加上偏移量(比如 3)
        new_code = code + shift
        # 转回字符
        new_char = chr(new_code)
        encrypted += new_char
    return encrypted

message = "Hello"
encrypted = caesar_encrypt(message, 3)
print(f"原文: {message}")
print(f"密文: {encrypted}")  # 输出: Khoor

中文注释

  • ord(char) 得到字符码点。
  • + shift 实现偏移加密。
  • chr(new_code) 转回新字符。
  • 这是古典密码学的雏形,适合初学者理解字符编码的可操作性。

总结:Python3 chr() 函数的核心价值

chr() 函数虽然只有一行代码,但背后是计算机处理字符的底层逻辑。它让我们能:

  • 将数字“翻译”成可见字符
  • 动态生成字符序列(如字母表、密码字符)
  • 处理多语言与 emoji
  • 配合 ord() 实现编码/解码逻辑

对于初学者,理解 chr() 是迈向“字符编程”第一步;对于中级开发者,它是构建文本处理、安全算法、数据转换模块的有力工具。

在日常开发中,只要涉及“字符与数字的转换”,chr() 就是一个值得记住的高效工具。掌握它,你对字符串的理解将更深入一层。

记住:在 Python3 中,每一个字符都只是一个数字,而 chr() 就是你与字符世界对话的“翻译官”。