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

python 学习笔记---函数式编程之高阶函数

2015-01-18 15:25 549 查看
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此 任意一个函数,只要他的输入是确定的,输出就是确定的。这种纯函数我们称之为没有副作用的。而允许使用变量的程序设计语言,由于函数内部的变量状态的不确定,同样的输入,可能得到不同的输出,因此这种函数是有副作用的。
函数式编程的一个特点是,允许吧函数本身作为参数传入到另一个函数,还允许返回一个函数!
python 对函数是编程提供部分的支持,由于Python函数内允许使用变量 因此 Python不是纯函数式编程。

1:高阶函数:
1:变量可以指向函数
>>>f=abs
>>>f
<build-in function abs>
>>>f(-10)
10


可见一个变量可以指向函数本身 然后通过这个变量来调用函数。

2:函数名也是变量
>>>abs=10
>>>abs
10


可见其实名也相当于一个变量 只是这个变量指向的是一个函数过程 如果更改了这个变量的值 那么在执行原来的函数调用就会报错。 要恢复 可以重启 Python交互环境

3: 传入函数
def add(x,y,f):
return f(x)+f(y)
>>>add(-5,6,abs)
>>>11


可见函数是可以当做一个参数 传入到一个函数中 这种接受一个函数作为参数的函数我们称之为高阶函数。

2:高阶函数:map/reduce
Python内置map() 和reduce()两个函数
1:map(函数,序列(list)) 将序列中的每一个元素都用函数作用一遍 生成一个新的序列 然后将这个序列返回
>>>def f(x):
return x*x
>>>map(f,[1,2,3,4,5])
[1,4,9,16,25]
>>>map(str,[1,2,3,4,5])
['1','2','3','4','5']


代码简单明了。意思清楚明白
2:reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4) reduce 相当于对序列的两个元素做函数运算 然后将返回值与下一个继续做函数运算。
>>>def add(x,y)
return x+y
>>>reduce(add,[1,3,5,7,9])
25


相当于对上述序列求和
>>>def fn(x,y)
return x*10+y
>>>reduce(fn,[1,3,5,7,9])
13579


相当于组成一个数值
>>>def norm(x)
return x[0].upper()+x[1:].lower()
>>>map(norm,['KdiI','AdDe','JDK'])
['Kdii','Adde','Jdk']


相当于首字母大写 其余字母小写(很简洁 与漂亮)

3:filter() 函数用于过滤序列(与map()相似 filter()也接受一个函数和一个序列 filter把传入的序列 的每一个元素作用于函数 然后根据返回的值true和false 决定丢弃还是保留)
>>>def is_odd(n)
return n%2 ==1
>>>filter(is_odd,[1,2,3,4,5,6,7,8,9])
[1,3,5,7,9]


相当于保留奇数
>>>def not_empty(n)
return n and n.strip()
>>>filter(not_empty,['A','B','',None,'c'])
['A','B','c']


相当于删除空字符串 filter 过滤器 关键在与如何正确的实现一个筛选函数
>>>def delP(n):
list=range(2,n/2+1)
if n<2:
return False
for i in list:
if n%i == 0:
return False
return True
>>>fliter(delP,range(100))


.........
求100以内的素数(代码相当的简洁 相对于其他的语言需要写两个for 循环 不过相对来说速度不行)

4:sorted() 排序算法
>>>sorted([36,5,12,9,21])
[5,9,12,21,36]
>>>sorted(['a','dsf',12,23])
[12,23,'a','dsf']


sorted() 函数 直接接受一个序列 对这个序列进行排序
>>>def reversed_cmp(x,y)
if x>y:
return -1
if x<y:
return 1
return 0
>>>sorted([36,5,12,9,21],reversed_cmp)
[36,21,12,9,5]


sorted 传入一个自定义的比较算法 然后根据这个算法进行排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: