好友caoshijun最近找我做一个字符串的解码,字符串来源于moinmoin,其中将部分字符和中文做了转义,变成了括号内的2位16进制字符。例子字符如下:
"caoshijun(2f)logo(2e)jpg"
可见"(2f)"对应"/",而"(2e)"对应"."。
于是写了一段Python程序用于解码,写完以后感觉可读性极差,如下:
import re
aaa="caoshijun(2f)logo(2e)jpg"
print 'result=',re.sub('\((.*?)\)',lambda sre:''.join(map(lambda idx:chr(int(sre.groups()[0][idx*2]+sre.groups()[0][idx*2+1],16)),range(len(sre.groups()[0])/2))),aaa)
解析后的运行结果如下:
result= caoshijun/logo.jpg
话说这其中用了两个lambda,以及map()之类的函数式编程的元素。在Python中有效的利用函数式编程可以将代码行数继续降低,有助于提高可读性,不过写到上面这种情况就不太好了。记得以前某书某牛说:“人类可以理解的代码行数是有限的。”感觉很有理。