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

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

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

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*x

if __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+y

if __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 != 0

if __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 0

print sorted(['bob','about','Zoueh','ERYfdgk','ryeu'],cmp_ignore_case)



你可能感兴趣的:(Python)