说实话,函数式编程没有接触过的,听过很多次。所以就从python的概念开始接触吧!
- if语句的一种替换:
2 func1()
3 elif <cond2>:
4 func2()
5 else:
6 func3()
上面是原始的条件判断语句,针对不同的条件做不同的操作。用函数式来写就是:
- lambda 表达式的使用
lambda 的概念原来在C#中接触过,以我的理解就是匿名函数。在python的帮助中定义如下:An anonymous inline function consisting of a single expression which is evaluated when the function is called. The syntax to create a lambda function is lambda [arguments]: expression 。lambda主要用来写一些小函数。例如
2 return x.lower()
3
可以写成
2 return x + y
3
可以写成
- 常用的map(),
reduce
()和filter
()
map()
对指定列表中每个对应的项执行传递的函数,并返回结果列表。相当于: for item in container : func(item)
2 map(lambda x:ord(x),a)
其结果是:[97, 98, 99, 100, 101, 102, 103]
reduce()
对每个后续项执行传递的函数,返回的是最终结果的内部累加;例如 reduce(lambda n,m:n*m, range(1,10))
意味着“10 的阶乘”(换句话说,用每一项乘上前一次相乘的乘积)
filter()
使用传递的函数对列表中的每一项“求值”,然后返回经过甄别的,通过了传递函数测试的项的列表。 我们在map的例子基础上执行如下代码:
结果是:'bdf ‘
- 函数循环
标准的for item in container可以用map函数来进行。如果我们要做一连串的函数调用,先调用func1,再 func2,func3,用map来实现的过程如下:
2 map(tmpFunc,[func1,func2,func3])
这样可以实现一串函数的连续调用,但是如何来传递参数,还是有待继续研究的。
while循环可以使用if语句的函数式来进行模拟。
----------------------------------------------------------------------------------
最后, 函数式编程的优点:绝大部分程序错误 -- 和促使程序员求助于调试来解决的问题 -- 之所以会发生,是因为在程序执行过程期间,变量包含了意外的值。函数程序只不过根本就不为变量分配值,从而避免了这一特殊问题。