闭包在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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
用Python进行行为驱动开发的入门教程
Apr 23 Python
python中异常报错处理方法汇总
Nov 20 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
python距离测量的方法
Mar 06 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
Python中的list与tuple集合区别解析
Oct 12 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
python torch.utils.data.DataLoader使用方法
Apr 02 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
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
PHP如何使用Memcached
2016/04/05 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
python ip正则式
2009/05/07 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
小学生一分钟演讲稿
2014/08/26 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
法律服务所工作总结
2015/08/10 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
Ajax实现三级联动效果
2021/10/05 Javascript