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() 就是你与字符世界对话的“翻译官”。