闭包在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实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
Python函数嵌套实例
Sep 23 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python构建指数平滑预测模型示例
Nov 21 Python
python生成特定分布数的实例
Dec 05 Python
python实现指定ip端口扫描方式
Dec 17 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
Python如何实现Paramiko的二次封装
Jan 30 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面向对象全攻略 (五) 封装性
2009/09/30 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
基于python实现学生管理系统
2018/10/17 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
详解python调用cmd命令三种方法
2019/07/08 Python
django认证系统 Authentication使用详解
2019/07/22 Python
python使用requests.session模拟登录
2019/08/09 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
python3代码中实现加法重载的实例
2020/12/03 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
工程项目建议书范文
2014/03/12 职场文书
介绍信模板
2015/01/31 职场文书
西柏坡导游词
2015/02/05 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers