Python 函数式编程 01 高阶函数

1 概述

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

2 高阶函数(Higher-order function)

2.1 特性

1)变量可以指向函数

函数本身也可以赋值给变量。

>>> f=abs
>>> f
<built-in function abs>
>>> f(-12)
12

2)函数名也可以是变量

abs = 10

当给函数名赋值时,它就变成了一个变量,而不能使用原来的函数功能了。

3)传入函数

一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数

# 定义函数
>>> def jia(x,y,f):
...     return f(x)+f(y)
...
# 调用函数
>>> jia(1,-4,abs)
5
2.2 map/reduce

1)map() 函数

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

>>> def f(x):
...     return x*x
...
# 使用map()函数
>>> l=map(f,[1,3,5,7,9])
>>> list(l)
[1, 9, 25, 49, 81]

2)reduce() 函数

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

>>> from functools import reduce
>>> def jia(x,y):
...     return x+y
...
# reduce函数
>>> reduce(jia,[1,2,3,4,5])
15
2.3 filter

filter() 函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

# 判断是否为偶数
>>> def odd(n):
...     return n%2==0
...
# 筛选出序列中的偶数
>>> list(filter(odd,[1,2,3,4,5,6,7,8,9]))
[2, 4, 6, 8]
2.4 sorted

1)sorted()函数就可以对list进行排序:

>>> sorted([34,5,323,56,12])
[5, 12, 34, 56, 323]

2)sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
# reverse,反序
>>> sorted([36, 5, -12, 9, -21], key=abs,reverse=True)
[36, -21, -12, 9, 5]

猜你喜欢

转载自blog.csdn.net/lihaogn/article/details/81002762