Python-3.12.0文档解读-内置函数ord()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是"自己不够强"的INTJ

个人主页:用哲学编程-CSDN博客
专栏:每日一题------举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

目录

详细说明

概述

语法

参数

返回值

示例

注意事项

应用场景

记忆策略

常用场景

[使用场景 1:字符排序和比较](#使用场景 1:字符排序和比较)

[使用场景 2:字符编码转换](#使用场景 2:字符编码转换)

[使用场景 3:简单加密](#使用场景 3:简单加密)

[使用场景 5:字符映射和处理](#使用场景 5:字符映射和处理)

巧妙用法

[使用技巧 1:检测字符串是否排序](#使用技巧 1:检测字符串是否排序)

[使用技巧 2:生成字符范围列表](#使用技巧 2:生成字符范围列表)

[使用技巧 3:实现自定义的字符编码方案](#使用技巧 3:实现自定义的字符编码方案)

[使用技巧 4:找到字符串中第一个非重复字符](#使用技巧 4:找到字符串中第一个非重复字符)

[使用技巧 5:计算字符串的哈希值](#使用技巧 5:计算字符串的哈希值)

综合技巧

[巧妙用法 1:实现基本的字符串加密(维吉尼亚密码)](#巧妙用法 1:实现基本的字符串加密(维吉尼亚密码))

[巧妙用法 2:生成可读的唯一标识符](#巧妙用法 2:生成可读的唯一标识符)

[巧妙用法 3:字符矩阵的旋转操作](#巧妙用法 3:字符矩阵的旋转操作)


详细说明

概述

ord() 函数是 Python 内置函数之一,用于返回表示单个 Unicode 字符的字符串的 Unicode 码点(Unicode code point)的整数值。这个函数在处理 Unicode 字符时非常有用,特别是在需要获取字符的数值表示时。

语法

ord(c)

参数

  • c:表示单个 Unicode 字符的字符串。注意,这个字符串必须是长度为 1 的字符串,如果长度不为 1 或者不是字符串类型,将会抛出 TypeError。

返回值

返回给定字符的 Unicode 码点,类型为整数。

示例

以下是一些 ord() 函数的示例:

python 复制代码
# 获取小写字母 'a' 的 Unicode 码点
unicode_a = ord('a')
print(unicode_a)  # 输出 97

# 获取大写字母 'A' 的 Unicode 码点
unicode_A = ord('A')
print(unicode_A)  # 输出 65

# 获取欧元符号 '€' 的 Unicode 码点
unicode_euro = ord('€')
print(unicode_euro)  # 输出 8364

# 获取中文字符 '你' 的 Unicode 码点
unicode_chinese_char = ord('你')
print(unicode_chinese_char)  # 输出 20320

注意事项

ord() 函数只接受长度为 1 的字符串。如果传入的字符串长度不为 1,将会引发 TypeError 异常。例如:

python 复制代码
ord('ab')  # 将会导致 TypeError: ord() expected a character, but string of length 2 found

虽然 ord() 函数主要用于 Unicode 字符,但它也适用于 ASCII 字符,因为 ASCII 是 Unicode 的一个子集。例如:

python 复制代码
ord('A')  # 返回 65
ord('a')  # 返回 97

ord() 是 chr() 函数的逆函数。chr() 函数用于将 Unicode 码点转换为对应的字符。例如:

python 复制代码
chr(97)  # 返回 'a'
chr(8364)  # 返回 '€'

应用场景

  1. 字符编码:在文本处理和自然语言处理 (NLP) 中,了解字符的 Unicode 码点可以帮助进行字符编码和解码。
  2. 排序和比较:在某些情况下,需要根据字符的 Unicode 码点进行排序或比较。
  3. 数据处理:在一些数据处理任务中,可能需要将字符转换为其数值表示,以便进行进一步处理。

通过了解和使用 ord() 函数,可以更好地处理和操作字符串及其对应的 Unicode 码点。


记忆策略

联想记忆:

  • ord 可以联想到 "ordinal"(序数)的缩写,表示顺序或位置。Unicode 码点正是字符在 Unicode 表中的位置。
  • 可以想象每个字符在 Unicode 表中都有一个"序号",ord() 函数就是获取这个"序号"。

常用场景

当然,以下是几个 ord() 函数的详细使用场景,每行代码都有注释:

使用场景 1:字符排序和比较

在需要对字符串中的字符进行排序或比较时,ord() 函数非常有用。

python 复制代码
# 定义两个字符进行比较
char1 = 'b'
char2 = 'a'

# 使用 ord() 获取字符的 Unicode 码点并进行比较
if ord(char1) > ord(char2):
    print(f"'{char1}' 大于 '{char2}'")  # 输出: 'b' 大于 'a'
else:
    print(f"'{char1}' 小于或等于 '{char2}'")

# 对字符串进行排序
string = "hello"
sorted_string = ''.join(sorted(string, key=ord))
print(sorted_string)  # 输出: 'ehllo'

使用场景 2:字符编码转换

在需要进行字符编码转换或处理特殊字符时,可以使用 ord() 函数获取字符的 Unicode 码点。

python 复制代码
# 定义一个包含特殊字符的字符串
special_chars = "你好,世界!"

# 将字符串中的每个字符转换为 Unicode 码点
unicode_points = [ord(char) for char in special_chars]

# 打印 Unicode 码点
print(unicode_points)  # 输出: [20320, 22909, 65292, 19990, 30028, 65281]

# 将 Unicode 码点转换回字符
reconstructed_string = ''.join(chr(point) for point in unicode_points)
print(reconstructed_string)  # 输出: '你好,世界!'

使用场景 3:简单加密

可以使用 ord() 函数进行简单的字符加密,例如凯撒密码。

python 复制代码
def caesar_encrypt(text, shift):
    encrypted_text = []
    for char in text:
        # 对字母进行加密
        if char.isalpha():
            # 根据字符大小写,使用不同的开始点
            start = ord('A') if char.isupper() else ord('a')
            # 计算加密后的字符
            encrypted_char = chr((ord(char) - start + shift) % 26 + start)
            encrypted_text.append(encrypted_char)
        else:
            # 非字母字符不变
            encrypted_text.append(char)
    return ''.join(encrypted_text)

# 示例加密
original_text = "Hello, World!"
encrypted_text = caesar_encrypt(original_text, 3)
print(encrypted_text)  # 输出: 'Khoor, Zruog!'

使用场景 5:字符映射和处理

在需要对特定字符进行映射或处理时,可以结合 ord() 和 chr() 函数使用。

python 复制代码
# 定义需要处理的字符集
characters = "ABCabc123"

# 定义字符映射表,将每个字符转换为其 Unicode 码点的十六进制表示
char_map = {char: hex(ord(char)) for char in characters}

# 打印字符映射表
for char, hex_value in char_map.items():
    print(f"字符 '{char}' 的 Unicode 码点为: {hex_value}")

# 输出类似:
# 字符 'A' 的 Unicode 码点为: 0x41
# 字符 'B' 的 Unicode 码点为: 0x42
# 字符 'C' 的 Unicode 码点为: 0x43
# 字符 'a' 的 Unicode 码点为: 0x61
# 字符 'b' 的 Unicode 码点为: 0x62
# 字符 'c' 的 Unicode 码点为: 0x63
# 字符 '1' 的 Unicode 码点为: 0x31
# 字符 '2' 的 Unicode 码点为: 0x32
# 字符 '3' 的 Unicode 码点为: 0x33

巧妙用法

ord() 函数虽然简单,但在某些情况下可以用来实现一些巧妙的功能。以下是几个不常见但非常巧妙的使用技巧:

使用技巧 1:检测字符串是否排序

可以使用 ord() 函数快速检测一个字符串是否已经按字母顺序排序。

python 复制代码
def is_sorted_string(s):
    # 用 ord() 获取每个字符的 Unicode 码点,检查是否按顺序排列
    return all(ord(s[i]) <= ord(s[i + 1]) for i in range(len(s) - 1))

# 示例
print(is_sorted_string("abc"))   # 输出: True
print(is_sorted_string("cba"))   # 输出: False
print(is_sorted_string("aabb"))  # 输出: True

使用技巧 2:生成字符范围列表

使用 ord() 和 chr() 函数,可以生成一系列连续的字符列表,比如生成从 'a' 到 'z' 的字母表。

python 复制代码
def generate_char_range(start_char, end_char):
    # 获取起始和结束字符的 Unicode 码点
    start = ord(start_char)
    end = ord(end_char)
    # 生成从起始字符到结束字符之间的所有字符
    return [chr(i) for i in range(start, end + 1)]

# 示例
alphabet = generate_char_range('a', 'z')
print(alphabet)  # 输出: ['a', 'b', 'c', ..., 'z']

使用技巧 3:实现自定义的字符编码方案

可以使用 ord() 来实现一个简单的自定义字符编码方案,在特定情况下可以用于加密或数据处理。

python 复制代码
def custom_encode(text, offset):
    encoded_chars = []
    for char in text:
        # 将每个字符的 Unicode 码点加上偏移量进行编码
        encoded_char = chr(ord(char) + offset)
        encoded_chars.append(encoded_char)
    return ''.join(encoded_chars)

def custom_decode(encoded_text, offset):
    decoded_chars = []
    for char in encoded_text:
        # 将每个编码字符的 Unicode 码点减去偏移量进行解码
        decoded_char = chr(ord(char) - offset)
        decoded_chars.append(decoded_char)
    return ''.join(decoded_chars)

# 示例
original_text = "Hello, World!"
offset = 5

# 编码
encoded_text = custom_encode(original_text, offset)
print(encoded_text)  # 输出: 'Mjqqt,~Btwqi!'

# 解码
decoded_text = custom_decode(encoded_text, offset)
print(decoded_text)  # 输出: 'Hello, World!'

使用技巧 4:找到字符串中第一个非重复字符

使用 ord() 函数来实现更高效地找到字符串中第一个非重复字符。

python 复制代码
def first_non_repeating_char(s):
    # 使用数组来统计字符出现的次数(假设字符在 ASCII 范围内)
    char_count = [0] * 256
    for char in s:
        char_count[ord(char)] += 1
    
    # 找到第一个出现次数为 1 的字符
    for char in s:
        if char_count[ord(char)] == 1:
            return char
    return None

# 示例
test_string = "swiss"
result = first_non_repeating_char(test_string)
print(result)  # 输出: 'w'

使用技巧 5:计算字符串的哈希值

可以使用 ord() 函数来计算字符串的简单哈希值,尽管这不是一个强散列函数,但在某些简单场景下可以使用。

python 复制代码
def simple_hash(s):
    # 使用 ord() 来计算每个字符的哈希值
    hash_value = 0
    for char in s:
        hash_value = (hash_value * 31 + ord(char)) % (10**9 + 7)
    return hash_value

# 示例
test_string = "hello"
print(simple_hash(test_string))  # 输出: 哈希值(如 99162322)

这些技巧展示了 ord() 函数在一些不太常见但非常巧妙的用法。在实际开发中,灵活运用 ord() 和 chr() 函数,可以为解决问题提供一些独特的思路和方法。


综合技巧

当然,以下是几个非常巧妙的 ord() 函数和其他函数或方法组合使用的示例:

巧妙用法 1:实现基本的字符串加密(维吉尼亚密码)

维吉尼亚密码是一种基于凯撒密码的多表密码。可以利用 ord() 和 chr() 函数来实现。

python 复制代码
def vigenere_encrypt(text, key):
    encrypted_text = []
    key_length = len(key)
    for i, char in enumerate(text):
        if char.isalpha():
            # 获取文本和密钥字符的 Unicode 码点
            text_char_code = ord(char)
            key_char_code = ord(key[i % key_length])
            base = ord('A') if char.isupper() else ord('a')
            # 计算加密字符
            encrypted_char = chr((text_char_code + key_char_code - 2 * base) % 26 + base)
            encrypted_text.append(encrypted_char)
        else:
            encrypted_text.append(char)
    return ''.join(encrypted_text)

def vigenere_decrypt(encrypted_text, key):
    decrypted_text = []
    key_length = len(key)
    for i, char in enumerate(encrypted_text):
        if char.isalpha():
            # 获取加密文本和密钥字符的 Unicode 码点
            encrypted_char_code = ord(char)
            key_char_code = ord(key[i % key_length])
            base = ord('A') if char.isupper() else ord('a')
            # 计算解密字符
            decrypted_char = chr((encrypted_char_code - key_char_code + 26) % 26 + base)
            decrypted_text.append(decrypted_char)
        else:
            decrypted_text.append(char)
    return ''.join(decrypted_text)

# 示例
original_text = "Hello, World!"
key = "KEY"

# 加密
encrypted_text = vigenere_encrypt(original_text, key)
print(encrypted_text)  # 输出: 'Rijvs, Uyvjn!'

# 解密
decrypted_text = vigenere_decrypt(encrypted_text, key)
print(decrypted_text)  # 输出: 'Hello, World!'

巧妙用法 2:生成可读的唯一标识符

通过组合 ord() 和 hashlib 模块生成一个基于字符串内容的唯一标识符。

python 复制代码
import hashlib

def generate_readable_id(text):
    # 使用 hashlib 生成字符串的 SHA256 哈希值
    sha256_hash = hashlib.sha256(text.encode()).hexdigest()
    # 将哈希值的前几位转换为可读字符(例如:a-z)
    readable_id = ''.join(chr((ord(char) % 26) + ord('a')) for char in sha256_hash[:8])
    return readable_id

# 示例
unique_id = generate_readable_id("Hello, World!")
print(unique_id)  # 输出: 类似 'fghijabc'

巧妙用法 3:字符矩阵的旋转操作

利用 ord() 函数和 numpy 模块实现字符矩阵的90度旋转。

python 复制代码
import numpy as np

def rotate_matrix_90(matrix):
    # 将字符矩阵转换为 Unicode 码点矩阵
    num_matrix = np.array([[ord(char) for char in row] for row in matrix])
    # 进行矩阵旋转
    rotated_num_matrix = np.rot90(num_matrix, k=-1)
    # 将 Unicode 码点矩阵转换回字符矩阵
    rotated_matrix = [''.join(chr(num) for num in row) for row in rotated_num_matrix]
    return rotated_matrix

# 示例
char_matrix = [
    "abc",
    "def",
    "ghi"
]

rotated_matrix = rotate_matrix_90(char_matrix)
for row in rotated_matrix:
    print(row)  # 输出:
                # gda
                # heb
                # ifc

感谢阅读。

相关推荐
码农颜9 分钟前
6.3 主函数流程剖析
开发语言·php
研☆香34 分钟前
聊一聊前端的常见字 关键字
开发语言·前端·javascript
lancyu1 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗1 小时前
Claude 使用指南
开发语言·python
工具分享1 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI2 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造2 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
longxiaozhang62 小时前
C# Array类:数组其实没那么难
开发语言·c#
程序员三藏2 小时前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
互联网中的一颗神经元3 小时前
06. Small 对象分配:mcache 无锁路径
开发语言·golang