Python recipe(2): Charset Filter
先贴代码:
![div css xhtml xml Example Source Code](https://images.cnblogs.com/cnblogs_com/suyuan/quote.gif)
''' 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表达式,不必多说,函数式语言精髓