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

 

posted on 2013-10-23 21:46  七海之风  阅读(105)  评论(0)    收藏  举报

导航