百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

python常用得内置函数解析——chr()函数

wptr33 2025-09-29 13:37 11 浏览

大家好详细解析 Python 中用于字符编码转换的内置函数 chr()。

1. 函数定义

chr() 函数用于将整数(Unicode 码位)转换为对应的字符。

  • 语法:chr(i)
  • 参数
    • i:整数,表示 Unicode 码位(范围:0 <= i <= 0x10FFFF)
  • 返回值:对应的 Unicode 字符(字符串)

2. 基本用法示例

ASCII 字符转换

# 基本的 ASCII 字符
print(chr(65))      # 输出: 'A'
print(chr(97))      # 输出: 'a'
print(chr(48))      # 输出: '0'
print(chr(32))      # 输出: ' ' (空格)

# 特殊字符
print(chr(10))      # 输出: '\n' (换行符)
print(chr(9))       # 输出: '\t' (制表符)
print(chr(13))      # 输出: '\r' (回车符)

数字到字符的转换

# 数字字符
for i in range(48, 58):
    print(chr(i), end=' ')
# 输出: 0 1 2 3 4 5 6 7 8 9

# 大写字母
for i in range(65, 91):
    print(chr(i), end=' ')
# 输出: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

# 小写字母
for i in range(97, 123):
    print(chr(i), end=' ')
# 输出: a b c d e f g h i j k l m n o p q r s t u v w x y z

3. Unicode 字符支持

chr() 支持完整的 Unicode 字符集,包括各种语言的文字、符号和表情。

各种语言的字符

# 中文汉字
print(chr(20013))      # 输出: '中' (U+4E2D)
print(chr(25991))      # 输出: '文' (U+6587)

# 日文假名
print(chr(12354))      # 输出: 'あ' (U+3042)
print(chr(12450))      # 输出: 'ア' (U+30A2)

# 韩文字母
print(chr(44032))      # 输出: '' (U+AC00)

# 希腊字母
print(chr(913))        # 输出: 'Α' (Alpha)
print(chr(945))        # 输出: 'α' (alpha)

特殊符号和表情

# 数学符号
print(chr(8734))       # 输出: '∞' (无穷大)
print(chr(8747))       # 输出: '∫' (积分符号)

# 货币符号
print(chr(8364))       # 输出: 'EUR' (欧元)
print(chr(165))        # 输出: 'yen' (日元/人民币)

# 表情符号 (Emoji)
print(chr(128512))     # 输出: '' (笑脸)
print(chr(128515))     # 输出: '' (大笑)
print(chr(128169))     # 输出: '' (便便)
print(chr(127881))     # 输出: '' (庆祝)

# 扑克牌花色
print(chr(9824))       # 输出: '' (黑桃)
print(chr(9827))       # 输出: '' (梅花)
print(chr(9829))       # 输出: '' (红心)
print(chr(9830))       # 输出: '' (方块)

4. 与ord()函数的对应关系

chr() 和 ord() 是一对互逆的函数:

函数

功能

参数

返回值

chr(i)

码位 → 字符

整数码位

字符

ord(c)

字符 → 码位

单个字符

整数码位

# 互逆操作示例
char = 'A'
code = ord(char)
print(f"字符 '{char}' 的码位: {code}")  # 输出: 字符 'A' 的码位: 65

back_to_char = chr(code)
print(f"码位 {code} 的字符: '{back_to_char}'")  # 输出: 码位 65 的字符: 'A'

# 测试互逆性
test_chars = ['中', '文', '', '∞', 'EUR']
for char in test_chars:
    code = ord(char)
    recovered = chr(code)
    print(f"'{char}' -> {code} -> '{recovered}' : {char == recovered}")

5. 实际应用场景

场景1:生成字符序列

def generate_alphabet(start, end):
    """生成指定范围的字符序列"""
    return [chr(i) for i in range(ord(start), ord(end) + 1)]

# 生成字母表
alphabet = generate_alphabet('a', 'z')
print("小写字母表:", ''.join(alphabet))

# 生成数字字符
digits = generate_alphabet('0', '9')
print("数字字符:", ''.join(digits))

# 生成特殊符号范围
symbols = [chr(i) for i in range(33, 48)]  # !"#$%&'()*+,-./
print("标点符号:", ''.join(symbols))

场景2:密码生成器

import random

def generate_password(length=12, use_special=True):
    """生成随机密码"""
    # 字符池
    lower = [chr(i) for i in range(97, 123)]      # a-z
    upper = [chr(i) for i in range(65, 91)]       # A-Z
    numbers = [chr(i) for i in range(48, 58)]     # 0-9
    special = [chr(i) for i in range(33, 48)]     # !"#$%&'()*+,-./
    
    # 组合字符池
    pool = lower + upper + numbers
    if use_special:
        pool += special
    
    # 生成密码
    password = ''.join(random.choice(pool) for _ in range(length))
    return password

# 生成密码
print("随机密码:", generate_password())
print("简单密码:", generate_password(8, False))

场景3:字符编码转换工具

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

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

# 测试转换
original = "Hello, 世界! "
codes = string_to_codes(original)
recovered = codes_to_string(codes)

print("原始字符串:", original)
print("Unicode码位:", codes)
print("恢复的字符串:", recovered)
print("是否一致:", original == recovered)

场景4:文本艺术生成

def create_text_art():
    """创建简单的文本艺术"""
    # 使用各种字符创建图案
    art = []
    
    # 边框字符
    border_char = chr(9617)  # 
    
    # 创建带边框的文本
    art.append(border_char * 20)
    art.append(f"{border_char}   Hello!   {border_char}")
    art.append(f"{border_char}   World!   {border_char}")
    art.append(border_char * 20)
    
    return '\n'.join(art)

print(create_text_art())

6. 错误处理和边界条件

# 有效范围检查
print("有效范围: 0 to", hex(0x10FFFF))

# 边界测试
print(chr(0))           # 输出: '\x00' (空字符)
print(chr(0x10FFFF))    # 输出: '\U0010ffff' (最大有效字符)

# 无效范围测试
try:
    print(chr(-1))      # ValueError: chr() arg not in range(0x110000)
except ValueError as e:
    print(f"错误: {e}")

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

# 浮点数会自动取整
print(chr(65.7))        # 输出: 'A' (65.7 → 65)
print(chr(65.2))        # 输出: 'A' (65.2 → 65)

7. 高级用法:字符处理和转换

字符编码检测

def detect_character_type(char):
    """检测字符类型"""
    code = ord(char)
    
    if 0 <= code <= 127:
        return "ASCII"
    elif 128 <= code <= 255:
        return "Latin-1"
    elif 19968 <= code <= 40959:  # 常用汉字范围
        return "中文汉字"
    elif 44032 <= code <= 55203:  # 韩文字母
        return "韩文字母"
    elif 12352 <= code <= 12447:  # 日文假名
        return "日文假名"
    elif code > 0xFFFF:
        return "扩展Unicode"
    else:
        return "其他Unicode"

# 测试字符类型检测
test_chars = ['A', '中', 'あ', '', '', '∞']
for char in test_chars:
    char_type = detect_character_type(char)
    print(f"'{char}' -> {char_type} (U+{ord(char):04X})")

自定义字符映射


def caesar_cipher(text, shift):
    """凯撒密码加密"""
    result = []
    for char in text:
        if char.isalpha():
            # 获取基础码位
            base = ord('A') if char.isupper() else ord('a')
            # 计算新字符
            code = (ord(char) - base + shift) % 26 + base
            result.append(chr(code))
        else:
            result.append(char)
    return ''.join(result)

# 测试凯撒密码
message = "Hello, World!"
encrypted = caesar_cipher(message, 3)
decrypted = caesar_cipher(encrypted, -3)

print("原始消息:", message)
print("加密后:", encrypted)
print("解密后:", decrypted)

8. 性能考虑

import timeit

# 比较不同方式生成字符序列
def test_performance():
    # 使用 chr()
    time_chr = timeit.timeit('[chr(i) for i in range(65, 91)]', number=10000)
    
    # 使用字符串
    time_str = timeit.timeit('list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")', number=10000)
    
    print(f"chr() 方式: {time_chr:.6f}秒")
    print(f"字符串方式: {time_str:.6f}秒")

test_performance()

9. 与其他相关函数的比较

# chr() vs str() 
print(chr(65))      # 输出: 'A' (字符)
print(str(65))      # 输出: '65' (数字字符串)

# 处理非整数
print(chr(65))      # 输出: 'A'
# print(chr('65'))  # TypeError: an integer is required

# 与 bytes 的关系
byte_data = b'A'
print(chr(byte_data[0]))  # 输出: 'A'

10. 注意事项和最佳实践

  1. 参数验证:始终确保参数在有效范围内
  2. 字符集兼容性:考虑目标环境的字符集支持
  3. 性能考虑:对于已知字符,直接使用字符字面量更高效
  4. 编码问题:在处理文件或网络时,注意字符编码
# 最佳实践:使用错误处理
def safe_chr(code, default='?'):
    """安全的chr函数,提供默认值"""
    try:
        return chr(code)
    except ValueError:
        return default

print(safe_chr(65))      # 输出: 'A'
print(safe_chr(-1))      # 输出: '?'
print(safe_chr(999999))  # 输出: '?'

总结

特性

描述

功能

将Unicode码位转换为字符

语法

chr(i)

参数

整数码位(0-0x10FFFF)

返回值

对应的Unicode字符

逆函数

ord()

主要用途

字符生成、编码转换、文本处理

支持范围

完整Unicode字符集(包括表情符号)

chr() 函数是 Python 文本处理中非常基础且强大的工具,它使得程序能够动态生成和处理各种字符,特别是在需要处理多语言文本、特殊符号或创建动态内容时非常有用。

相关推荐

什么是Java中的继承?如何实现继承?

什么是继承?...

Java 继承与多态:从基础到实战的深度解析

在面向对象编程(OOP)的三大支柱中,继承与多态是构建灵活、可复用代码的核心。无论是日常开发还是框架设计,这两个概念都扮演着至关重要的角色。本文将从基础概念出发,结合实例与图解,带你彻底搞懂Java...

Java基础教程:Java继承概述_java的继承

继承概述假如我们要定义如下类:学生类,老师类和工人类,分析如下。学生类属性:姓名,年龄行为:吃饭,睡觉老师类属性:姓名,年龄,薪水行为:吃饭,睡觉,教书班主任属性:姓名,年龄,薪水行为:吃饭,睡觉,管...

java4个技巧:从继承和覆盖,到最终的类和方法

日复一日,我们编写的大多数Java只使用了该语言全套功能的一小部分。我们实例化的每个流以及我们在实例变量前面加上的每个@Autowired注解都足以完成我们的大部分目标。然而,有些时候,我们必须求助于...

java:举例说明继承的概念_java继承的理解

在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,同理,...

从零开始构建一款开源的 Vibe Coding 产品 Week1Day4:业界调研之 Agent 横向对比

前情回顾前面两天我们重点调研了了一下Cursor的原理和Cursor中一个关键的工具edit_file的实现,但是其他CodingAgent也需要稍微摸一下底,看看有没有优秀之处,下...

学会这几个插件,让你的Notepad++使用起来更丝滑

搞程序开发的小伙伴相信对Notepad++都不会陌生,是一个占用空间少、打开启动快的文件编辑器,很多程序员喜欢使用Notepad++进行纯文本编辑或者脚本开发,但是Notepad++的功能绝不止于此,...

将 node_modules 目录放入 Git 仓库的优点

推荐一篇文章Whyyoushouldcheck-inyournodedependencies[1]...

再度加码AI编程,腾讯发布AI CLI并宣布CodeBuddy IDE开启公测

“再熬一年,90%的程序员可能再也用不着写for循环。”凌晨两点半,王工还在公司敲键盘。他手里那份需求文档写了足足六页,产品经理反复改了三次。放在过去,光数据库建表、接口对接、单元测试就得写两三天。现...

git 如何查看stash的内容_git查看ssh key

1.查看Stash列表首先,使用gitstashlist查看所有已保存的stash:...

6万星+ Git命令懒人必备!lazygit 终端UI神器,效率翻倍超顺手!

项目概览lazygit是一个基于终端的Git命令可视化工具,通过简易的TUI(文本用户界面)提升Git操作效率。开发者无需记忆复杂命令,即可完成分支管理、提交、合并等操作。...

《Gemini CLI 实战系列》(一)Gemini CLI 入门:AI 上命令行的第一步

谷歌的Gemini模型最近热度很高,而它的...

deepin IDE新版发布:支持玲珑构建、增强AI智能化

IT之家8月7日消息,深度操作系统官方公众号昨日(8月6日)发布博文,更新推出新版deepin集成开发环境(IDE),重点支持玲珑构建。支持玲珑构建deepinIDE在本次重磅更...

狂揽82.7k的star,这款开源可视化神器,轻松创建流程图和图表

再不用Mermaid,你的技术文档可能已经在悄悄“腐烂”——图表版本对不上、同事改完没同步、评审会上被一句“这图哪来的”问得哑口无言。这不是危言耸听。GitHub2025年开发者报告显示,63%的新仓...

《Gemini CLI 实战系列》(五)打造专属命令行工具箱

在前几篇文章中,我们介绍了GeminiCLI的基础用法、效率提升、文件处理和与外部工具结合。今天我们进入第五篇...