Python Cookbook学习记录 ch1_9_2013/10/23
1.9 简化字符串的translate方法的使用
本节是将上一节介绍的translate方法封装成一个功能强大的函数,并介绍“闭包"的概念
此函数的指导思想是“'frm'和'to'两个变量获得转换方案,除去要保留的剩下的都是要删除的”
将转换方案和要删除的作为两个参数传给函数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 >>> 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 Perkins : -' >>> digits_to_stars = translator(frm = string.digits, to = '*') >>> digits_to_stars('Chris Perkins : 224-7992') 'Chris Perkins : ***-****'
上述代码还展示了“闭包”的概念。即在函数translator中又定义了内层函数translate,translate即为闭包(closure)。闭包可以对外层函数的变量进行引用。
下述一段简单的代码描述了闭包的基本概念。
>>> def addx(x): def addxy(y):return x+y return addxy >>> a = addx(10) >>> a(5) 15
关于闭包的更多参考信息:http://blog.csdn.net/marty_fu/article/details/7679297
浙公网安备 33010602011771号