Python (九)函数式编程,高阶函数

来源:互联网 发布:0ffice办公软件 编辑:程序博客网 时间:2024/06/05 03:25

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

一、高阶函数

高阶函数简单的理解就是,一个函数在调用的时候将另外一个函数作为参数传入,这个函数就是高阶函数。

函数式编程就是指这种高度抽象的编程范式。

# -*- coding:utf-8 -*-        def function_test(a,b,f):print f(a)print f(b)return f(a) + f(b)if __name__ == '__main__':print "--------------------"print function_test(-3,-4,abs)
注意:在函数作为形参的时候,只需要传入函数名就可以了。

# -*- coding:utf-8 -*-        def test(f):print abs(f)def function_test(a,b,s):s(a)if __name__ == '__main__':print "--------------------"function_test(-3,-4,test)

二、高阶函数map()

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回

# -*- coding:utf-8 -*-        def test(x):return x*xif __name__ == '__main__':L = map(test,[1,2,3,4,5,6])for x in xrange(0,len(L)):print L[x]

高阶函数reduce():

reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算.

# -*- coding:utf-8 -*-        def test(x,y):return x+yif __name__ == '__main__':sum = reduce(test,[1,2,3,4])print sum

这两个高阶函数可以配合同时使用,才能够体现存在的价值。

高阶函数filter()

filter()函数在使用的时候也需要传入两个参数,一个是函数,一个是序列,filter()会将传入的函数作用于序列中的每一个元素,结果根据函数返回值是True还是False决定保留还是丢弃该元素。

# -*- coding:utf-8 -*-        def test(x):return x % 2 != 0if __name__ == '__main__':L = filter(test,[1,2,3,4,5,6,7,8,9,10])print L

删除序列中的空字符串:

def not_empty(s):    return s and s.strip()print filter(not_empty, ['A', '', 'B', None, 'C', '  '])

高阶函数sorted():

这是一个排序函数是Python内置的函数,直接使用的时候按照默认的排序方式排序,由小到大。这个函数还可以接受一个自定义的排序函数,将自定义的排序函数作用于序列中的每一个元素。

# -*- coding=utf-8 -*-L = [4,77,4,2,9,76,45]print sorted(L)print sorted(['df','DRFDU','jkTUU','TERWRfdjj'])

自定义忽略大小写比较字符串。

def cmp_ignore_case(s1, s2):    u1 = s1.upper()    u2 = s2.upper()    if u1 < u2:        return -1    if u1 > u2:        return 1    return 0print sorted(['bob','about','Zoueh','ERYfdgk','ryeu'],cmp_ignore_case)



0 0
原创粉丝点击