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

Python入门之函数式开发

2016-07-20 00:00 183 查看
摘要: Python函数式开发

在了解函数式开发之前,我们先了解一下什么是高阶函数。高阶函数有以下属性:

1.变量可以指向函数
2.函数的参数可以接收变量
3.一个函数可以接收另一个函数作为参数
4.能接收函数作参数的函数就是高阶函数

示例为:

def add(x,y,f):
return f(x) + f(y)
a = abs
print add(-5,5,a)
#结果为10

我先将a指向了abs函数,然后在自定义的函数add中,我们把a当做了参数,也就是把abs函数当做了参数。

下面给大家介绍几个Python内置的高阶函数:

map()函数:它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。示例为:

def f(x):
return x*x
print map(f,[1,2,3,4])
#输出值为:[1, 4, 9, 16]

可以看得出,map的功能就是让list里面的每一个值都执行一遍f函数,从而变成一个新的list。

reduce()函数:reduce()函数接收的参数和 map()类似,一个函数 f一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。示例为:

def f(x,y):
return x+y
print reduce(f,[1,2,3,4,5])
#输出值为:15

reduce就是先拿list中的1,2来作为参数调用f函数,得到的结果和3一起作为参数调用f函数,得到的结果再与4一起作为参数来调用f函数,以此类推。所以该段代码就相当于输出一下1+2+3+4+5。

P.S.如果对谷歌的大数据处理有一定了解,或者读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”(这是谷歌家的东西,所以想阅读原文的朋友,记得翻墙)的朋友,应该是很容易理解上述这两个高阶函数的。

filter()函数:filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。示例为:

def is_not_empty(s):
return s and len(s.strip())>0
print filter(is_not_empty,['test',None,'','str','   ','END'])
#输出值为:['test', 'str', 'END']

filter就是拿list里的每个元素去执行is_not_empty函数,如果返回值为true,则保留,如果返回值为false,则将其去除。

sorted()函数:sorted()函数可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。示例为:

print sorted([2,7,3,0,16])
#输出值为:[0, 2, 3, 7, 16]
def reversed_cmp(x,y):
if(x>y):
return -1
if(x<y):
return 1
return 0
print sorted([2,7,3,0,16],reversed_cmp)
#输出值为:[16, 7, 3, 2, 0]

从上可以看出,当sorted只传进了一个list,那么将对其进行顺序排序。如果想进行逆序排序,可以自定义函数,然后将其当做参数传进sorted里面。

讲到这里,函数式开发到底是什么呢?我的理解的话,就是这种高度抽象的编程范式。它允许把函数本身作为参数传入另一个函数,还允许返回一个函数!而且函数式编程本身并不包含变量,也就是说,当输入确定时,那么输出也就确定了,这种纯函数编程,我们称之为没有副作用。而普通的函数,由于变量的存在,当输入确定时,可能输出也是有所不同的,这种函数就是有副作用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python