Python recipe(2): Charset Filter

先贴代码:

div css xhtml xml Example Source Code Example Source Code [http://www.cnblogs.com/tomsheep/]
'''
Created on 2010-5-20

@author: lk
'''

import string

_allchars = string.maketrans('', '')

def makefilter(keep):
    """
    return a functor as filter
    """
    delchars = _allchars.translate(_allchars, keep)
    return lambda s, a = _allchars, d = delchars: s.translate(a, d)

def canonicform(keep):
    return makefilter(keep)(_allchars)
    
if __name__ == '__main__':
    print canonicform(string.letters + string.digits + '_')
    print makefilter('abc')('abcdabcd')

以上代码来自Python Cookbook 3-8

概述:

    给定一个想要保留的字符集(keep),创建一个filter使其能过滤掉keep之外的字符。这里的makefilter返回值为一个functor,接受三个参数(其中两个有默认值)。canonicform函数实际是对makefilter的一个应用,过滤后的字符不存在重复。

 

代码说明:

1.string.maketrans:这个函数生成一个字符转换表(256个字符),供string对象的tanslate函数使用;比如,如果string.maketrans(‘abc’, ‘123’),则返回一个对照表,这个表中的abc三个字符被分别替换为了123。在本例中string.maketrans(‘’,’’)实则生成一个ascii字符表的拷贝

2. 字符串的translate函数,接受一个字符转换表t和一个字符集d(包含要删除的所有字符)。这个函数包含两个动作,第一是把原字符串中出现的d字符集字符删除,第二是按照字符对照表t将所剩字符进行转换。注意这两步的顺序。举例:t是string.maketrans(‘abc’, ‘123’)生成的,’abcdabcd’.translate(t, ‘ab’)则返回’3d3d’

3. lambda表达式,不必多说,函数式语言精髓

posted on 2010-05-20 20:12  tomsheep  阅读(419)  评论(0编辑  收藏  举报

导航