体验Python的函数式编程

以前一直听工作室的Pierric讲函数式编程和Haskell,没有真正的见识,昨天在JavaEye的Python圈子里看到有人用Python的函数式编程解决八皇后问题,确实震撼。不过自己的数学能力确实不行,尤其是在复杂的函数定义和极长的return语句面前更是力不从心。简单的看,逻辑判断和递归在函数式编程中占了重要的角色。

不提了,内功是要慢慢修炼的,现在看看用Python能做点什么。

Python也提供了一些可以适用于函数式编程的特性,比如遍历一个列表,取出一个复合值大于5的列表:

l = [3,6,1,9,7,10]
nl = [x for x in l if x > 5]

这种x for x in l的语句的结果就是一个生成器(generator),包含了列表中的所有项

再复杂一些可以是

la = [1,3,5,7,9]
lb = [2,4,6,8,0]
nl = [x + y for x in la for y in lb]

这个结果相当于一个二重循环,它会把两个列表的每一项都相加。

那么如果要将两个列表中的项目对应相加呢,可以用python中的map函数实现

la = [1,3,5,7,9]
lb = [2,4,6,8,0]
func = lambda x,y : x+y
nl = map(func,la,lb)

map对传入的序列执行指定的函数,返回结果列表。

Python还提供了filter函数,用来从序列中取出满足一定条件的子序列:

lc = ['rock', 'tom', 'yakin', 'timosenk']
func = lambda x : len(x) > 4
nl = filter(func,lc)


reduce函数,将序列中的值依次传入计算结果,进行迭代运算

ld = range(100)
func = lambda x,y : x+y
n = reduce(func,ld)

其中x保存每次lambda中运算的结果最后返回,而y则是最近传入的序列中的值

以上差不多就是Python为我们提供的工具,至于从这些开展函数式编程还有很长的路要走,如果你和我一样也是对此一知半解的话,可以去JavaEye的Python圈子里下载那个八皇后问题解的写法体验一下。

你可能感兴趣的:(编程,工作,python,haskell)