闭包在python中的应用之translate和maketrans用法详解


Posted in Python onAugust 27, 2014

相对来说python对字符串的处理是比较高效的,方法也有很多。其中maketrans和translate两个方法被应用的很多,本文就针对这两个方法的用法做一总结整理。

首先让我们先回顾下这两个方法:

① s.translate(table,str) 对字符串s移除str包含的字符,剩下的字符串按照table里的字符映射关系替换。table可以理解为转换表,比较'a' -> 'A', 'b'->'B'.

② tabel = string.maketrans('s1', 's2') s1 和 s2 的长度必须一致,maketrans生成一个转换表,若在s中有s1,则替换为s2,这个转换表是字符字符一个个对应的,没必要全部包含。

举几个例子:

import string
s = 'helloworld, 0001111'
table = string.maketrans('','')#没有映射,保留原字符串
s.translate(table) #hello world, 0001111
s.translate(table, 'hello000)'#world, 1111
table = string.maketrans('abcdefgh','ABCDEFGH')
s.translate(table)#HEllo,worlD,0001111
s.translate(table,'world')#HEllo,0001111

我们现在可以将makerans,translate包装起来,形成一个返回闭包的工厂函数(print就是工厂函数),如下所示:

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

函数的最后用到了闭包,闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数:

def make_adder(addend):
   def adder(augend): return augend + addend
   return adder

执行 p = make_addr(23)将产生内层函数addr的一个闭包,这个闭包在内部引用了名字addend,而addend又绑定到数值23,执行p(100)则最终返回123。

现在我们已经把各种可能性封闭在一个建议以用的接口后面。

>>>digits_only = translator(keep = string.digits)
>>>digits_only('Chris Perkins :224 -7992')
'2247992'

移除属于某字符集合的元素也非常简单:

>>>no_digits = translator(delete = string.digits)
>>>no_digits('Chris Perkins:224-7992')
'Chris Perkings : - '

也可以替换:

>>>digits_to_hash = translator(from = string.digits, to = '#')
>>>digits_to_hash('Chris Perkins :224-7992')
'Chris Perkins: ###-####'

当delete和keep有重叠部分的时候,delete参数优先

>>>trans = translator(delete = 'abcd', kepp ='cdef')
>>>trans('abcdefg')
'ef'

其实可以更详细的添加一些异常来处理同时出现delete,keep的情况。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中DJANGO简单测试实例
May 11 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
python和shell监控linux服务器的详细代码
Jun 22 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
Python实现壁纸下载与轮换
Oct 19 Python
python自动化调用百度api解决验证码
Apr 13 Python
解决python3安装pandas出错的问题
May 20 Python
Python制作表白爱心合集
Jan 22 Python
web.py获取上传文件名的正确方法
Aug 26 #Python
Python version 2.7 required, which was not found in the registry
Aug 26 #Python
web.py中调用文件夹内模板的方法
Aug 26 #Python
web.py在模板中输出美元符号的方法
Aug 26 #Python
Django1.3添加app提示模块不存在的解决方法
Aug 26 #Python
Python引用(import)文件夹下的py文件的方法
Aug 26 #Python
Python中使用item()方法遍历字典的例子
Aug 26 #Python
You might like
php的正则处理函数总结分析
2008/06/20 PHP
php array_slice函数的使用以及参数详解
2008/08/30 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
python实现telnet客户端的方法
2015/04/15 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
python实现简易版计算器
2020/06/22 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Python 从相对路径下import的方法
2018/12/04 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
企业党员公开承诺书
2014/03/26 职场文书
学习十八大的心得体会
2014/09/12 职场文书
丧事答谢词
2015/01/05 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL