`
gashero
  • 浏览: 944018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Python中用函数式编程来恶心人

阅读更多

好友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中有效的利用函数式编程可以将代码行数继续降低,有助于提高可读性,不过写到上面这种情况就不太好了。记得以前某书某牛说:“人类可以理解的代码行数是有限的。”感觉很有理。

分享到:
评论
2 楼 linkerlin 2009-10-23  
玩FP还是Haskell味道最正!
1 楼 lych 2009-09-18  
print 'result =', re.sub('\((..)\)', lambda sre: chr(int(sre.groups()[0], 16)), aaa)

相关推荐

Global site tag (gtag.js) - Google Analytics