python内置模块string源码浅析之maketrans

本文详细介绍了Python中maketrans函数的工作原理及其使用方法。该函数用于创建字符串转换表,适用于ASCII字符集内的字符串替换操作。文章还探讨了如何针对中文字符扩展此功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是源码:
l = map(chr, xrange(256))#生成一个ascii字符列表
_idmap = str('').join(l)#转化成字符串
del l
_idmapL = None
def maketrans(fromstr, tostr):
"""maketrans(frm, to) -> string Return a translation table (a string of 256 bytes long) suitable for use in string.translate. The strings frm and to must be of the same length. """ 
if len(fromstr) != len(tostr): 
raise ValueError, "maketrans arguments must have same length" 
global _idmapL
if not _idmapL: 
_idmapL = list(_idmap) 
L = _idmapL[:]#这里用L = _idmapL[:]使得L为 _idmapL的浅拷贝,从而我们对L的操作不会影响到_idmapL,可以复用_idmapL 
fromstr = map(ord, fromstr) 
for i in range(len(fromstr)):
L[fromstr[i]] = tostr[i]
return ''.join(L)
#这部分做了一一对应,将原本ascii编码表相应的位置做了替换比如maketrans('a','b'),这部分的执行过程便是这样:转化'a',找到'a'在ascii#的位置ord('a')=97,用'b'替换ascii码表中97位置为'b',即L[96]='b',然后返回更新后的ascii码表
总结:maketrans替换的ascii码表中的值,所以它能处理的范围也只能在ascii包含的字符内,中文是不行的,如果想把这个功能用于中文的话,可以参照思路做一个utf8的maketrans。不过生成的映射表长度变了,不知道ranslate能不能使用,如果不行,还要继承string类,覆盖原来的translate函数,或者直接改源码。现在从python官方文档可以读到内建模块的源码,但是找不到内建类型和函数的源码,如果有人知道,望告知,多谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值