translate和maketrans 方法总结

官方文档中,关于两种方法的
摘要由CSDN通过智能技术生成

官方文档中,关于两种方法的说明翻译如下:


string.maketrans(intab, outtab):返回一个translation table,该table定义了intab字符串中的字符到outtab字符串中字符的映射关系,intab与outtab的长度务必相等。

s.translate(table [table,deletechars]):将s中在deletechars中出现过的字符删除,根据给定的table中的映射关系,将字符串中的字符转换,返回字符串s的拷贝。


cookbook中为了对translate方法进行简化,采用了一个返回闭包的工厂函数:

代码如下:

import string
def translator(frm='',to='',delete='',keep=None):
	if len(to)==1:
		to=to*len(frm)
	trans=string.maketrans(frm,to)
	if keep is not None:
		allchars=string.maketrans('','')
		delete=allchars.translate(allchars,keep.translate(allchars,delete))
	def translate(s):
		return s.translate(trans,delete)
	return translate

该函数把各种可能性都封闭在一个简单的接口后面,先解释一下代码,后面再介绍这个返回闭包的工厂函数机制。

参数列表:

frm和to定义了字符串转换映射,delete定义了要删除的字符,keep是要保留的字符。

if keep is not None:
	allchars=string.maketrans('','')
	delete=allchars.translate(allchars,keep.translate(allchars,delete))
这段代码的逻辑有点绕。
allchars=string.maketrans('','')
allchars表示全体字符。

keep.translate(allchars,delete)

表示从要保留的字符中剔除要delete的字符后,返回剩余字符,即keep-delete。

delete=allchars.translate(allchars,keep.translate(allchars,delete))
表示从全体字符中剔除剩余字符,返回all-(keep-delete),赋值给delete.

以上运算都是集合运算。

最后要返回的translate函数功能为:删除除了keep中所有的字符,如果keep与delete有交集,交集也删除(delete优先);再按照列表转换。


下面简单介绍一下所谓工厂函数:

这里闭包即为里面的内层函数,它之于外层函数是一个本地变量,外层函数好比根据参数定制专门制造里面内层函数的工厂,故称之为工厂函数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值