闭包在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使用clear方法清除字典内全部数据实例
Jul 11 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
Python操作MySQL模拟银行转账
Mar 12 Python
PyQt5实现拖放功能
Apr 25 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
对python遍历文件夹中的所有jpg文件的实例详解
Dec 08 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
django解决跨域请求的问题详解
Jan 20 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
Python3爬虫中Selenium的用法详解
Jul 10 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验证码函数的使用示例
2013/05/03 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
phpfpm的作用和用法
2019/10/10 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
web.py在模板中输出美元符号的方法
2014/08/26 Python
python生成器表达式和列表解析
2016/03/10 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
出纳员的岗位职责
2014/02/22 职场文书
计算机系本科生求职信
2014/05/31 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
社团招新宣传语
2015/07/13 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL