您的位置:首页 > 编程语言 > Python开发

python 中的函数式编程

2010-06-12 23:07 197 查看
说实话,函数式编程没有接触过的,听过很多次。所以就从python的概念开始接触吧!

if语句的一种替换:

if <cond1>:
func1()
elif <cond2>:
func2()
else:
func3()上面是原始的条件判断语句,针对不同的条件做不同的操作。用函数式来写就是:

(<cond1> and func1()) or (<cond2> and func2()) or 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主要用来写一些小函数。例如

def lowercase(x):
return x.lower()
可以写成

lowercase = lambda x: x.lower() def adder(x,y):
return x + y
可以写成

adder=lambda x,y:x+y常用的map(),
reduce
()和
filter
()
map()
对指定列表中每个对应的项执行传递的函数,并返回结果列表。相当于: for item in container : func(item)

a="abcdefg"
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的例子基础上执行如下代码:

filter(lambda x:ord(x)%2==0 ,a)结果是:'bdf ‘

函数循环
标准的for item in container可以用map函数来进行。如果我们要做一连串的函数调用,先调用func1,再 func2,func3,用map来实现的过程如下:

tmpFunc=lambda x: x()
map(tmpFunc,[func1,func2,func3])这样可以实现一串函数的连续调用,但是如何来传递参数,还是有待继续研究的。

while循环可以使用if语句的函数式来进行模拟。

----------------------------------------------------------------------------------

最后, 函数式编程的优点:绝大部分程序错误 -- 和促使程序员求助于调试来解决的问题 -- 之所以会发生,是因为在程序执行过程期间,变量包含了意外的值。函数程序只不过根本就不为变量分配值,从而避免了这一特殊问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: