python常用得内置函数解析——chr()函数
wptr33 2025-09-29 13:37 20 浏览
大家好详细解析 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 z3. 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. 注意事项和最佳实践
- 参数验证:始终确保参数在有效范围内
- 字符集兼容性:考虑目标环境的字符集支持
- 性能考虑:对于已知字符,直接使用字符字面量更高效
- 编码问题:在处理文件或网络时,注意字符编码
# 最佳实践:使用错误处理
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 文本处理中非常基础且强大的工具,它使得程序能够动态生成和处理各种字符,特别是在需要处理多语言文本、特殊符号或创建动态内容时非常有用。
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
