ZetCode

Python ord 函数

上次修改时间:2025 年 4 月 11 日

本综合指南探讨了 Python 的 ord 函数,该函数返回字符的 Unicode 码位。我们将介绍 ASCII 值、Unicode 处理以及字符编码的实际示例。

基本定义

ord 函数返回一个整数,表示字符的 Unicode 码位。 它是 chr 函数的反函数。

主要特点:接受单字符字符串(长度为 1),返回一个介于 0 和 1,114,111(十六进制的 0x10FFFF)之间的整数。 对无效输入引发 TypeError。

基本 ASCII 用法

这是一个使用 ASCII 字符的简单用法,展示了 ord 如何返回它们的数值。

basic_ord.py
# Uppercase letters
print(ord('A'))  # 65
print(ord('B'))  # 66

# Lowercase letters
print(ord('a'))  # 97
print(ord('b'))  # 98

# Digits
print(ord('0'))  # 48
print(ord('9'))  # 57

# Special characters
print(ord(' '))  # 32 (space)
print(ord('!'))  # 33

此示例显示了 ord 与常用 ASCII 字符的用法。 这些值与标准 ASCII 编码匹配,其中“A”为 65,“a”为 97,“0”为 48。

请注意,大写和小写字母具有不同的码位,小写字母的值高于相应的大写字母。

Unicode 字符

ord 可以处理任何 Unicode 字符,而不仅仅是 ASCII。 此示例演示了各种 Unicode 符号。

unicode_ord.py
# Common symbols
print(ord('€'))  # 8364 (Euro sign)
print(ord('¥'))  # 165 (Yen sign)

# Emoji
print(ord('😊')) # 128522 (Smiling face)

# Chinese character
print(ord('中')) # 20013

# Mathematical symbols
print(ord('∑'))  # 8721

这些示例显示了 ord 与 ASCII 之外的 Unicode 字符的用法。 该函数返回它们在 Unicode 标准中的唯一码位。

这展示了 Python 对 Unicode 的完整支持,其中每个字符都具有唯一的数字标识符,而与语言或符号类型无关。

错误处理

当使用不正确时,ord 函数会引发 TypeError。 此示例显示了常见的错误情况。

errors.py
try:
    print(ord(''))  # Empty string
except TypeError as e:
    print(f"Error: {e}")  # ord() expected a character, but string of length 0 found

try:
    print(ord('ab'))  # String longer than 1 character
except TypeError as e:
    print(f"Error: {e}")  # ord() expected a character, but string of length 2 found

try:
    print(ord(65))  # Not a string
except TypeError as e:
    print(f"Error: {e}")  # ord() expected string of length 1, but int found

这些示例演示了 ord 的严格输入要求。 它只接受单字符字符串,并拒绝所有其他输入类型。

在处理将传递给 ord 的用户输入时,正确的错误处理非常重要,以避免程序崩溃。

字符分析

此示例演示了如何使用 ord 分析字符属性,例如大小写、数字状态或特殊字符。

analysis.py
def char_info(c):
    code = ord(c)
    print(f"Character: {c}")
    print(f"Code point: {code}")
    print(f"Uppercase: {65 <= code <= 90}")
    print(f"Lowercase: {97 <= code <= 122}")
    print(f"Digit: {48 <= code <= 57}")
    print(f"Control char: {code < 32 or code == 127}")

char_info('A')
char_info('z')
char_info('5')
char_info('\n')

此函数使用 ord 获取字符的码位,然后检查各种范围以确定其属性。

这种分析对于文本处理、验证或实现超出 Python 内置方法的自定义字符分类逻辑非常有用。

自定义编码转换

此示例演示了如何使用 ord 将文本转换为自定义数字表示形式。

encoding.py
def text_to_codes(text, base=16):
    return [hex(ord(c)) if base == 16 else str(ord(c)) for c in text]

print(text_to_codes("Hello"))  # ['0x48', '0x65', '0x6c', '0x6c', '0x6f']
print(text_to_codes("Python", 10))  # ['80', '121', '116', '104', '111', '110']

def create_cipher_key(text):
    return {c: ord(c) * 2 for c in text}

print(create_cipher_key("secret"))  # {'s': 230, 'e': 202, 'c': 198, 'r': 216, 't': 232}

第一个函数将文本转换为十六进制或十进制码位。 第二个函数通过将每个字符的值加倍来创建一个简单的密码密钥。

这些示例显示了 ord 在文本处理、编码和简单密码操作中的实际应用。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程