函数式编程是一种高度抽象的编程范式。用纯函数式编程语言编写的函数没有变量。因此,对于任何函数,只要输入是确定性的,输出就是确定性的。我们称之为纯函数。因为没有副作用。函数式编程的特点之一是允许函数接收函数作为参数,并将函数作为返回值返回。 Python 为函数式编程提供部分支持。 Python 不是一种纯粹的函数式编程语言,因为它允许变量。
高阶函数
所谓高阶函数,就是让函数的参数接收其他函数。以下是python中的一些内置高阶函数:
map() map() 函数接受两个参数,一个序列和一个函数。 map()的作用是将传入的函数依次应用到序列的元素上,然后将结果作为Iterator返回。
def function(x):
return x * x
r = map(function,[1,2,3,4,5])
print('map result:',list(r))
//运行结果:
//map result: [1, 4, 9, 16, 25]
reduce() reduce() 也接受两个参数,一个函数和一个序列; reduce() 也对序列应用了一个函数,但是这个函数必须接受两个参数,reduce 继续结果并累加序列的下一个元素计算。
from functools import reduce
def function1(x,y):
return x + y
reduce(function1,[1,2,3,4,5])
print('reduce result:',reduce(function1,[1,2,3,4,5]))
//运行结果:
//reduce result: 15
filter() filter()的作用是对序列进行过滤。与 map() 类似,filter 也接受一个函数和一个序列。 Filter 将函数应用于序列的每个元素,并根据函数返回的 True 或 False 决定是否保留或删除该元素。
def isOdd(x):
return x % 2 == 1
p = list(filter(isOdd,[1,2,3,4,5]))
print('filter result:',p)
//运行结果:
//filter result: [1, 3, 5]
sorted() 顾名思义,sorted()的作用就是对序列进行排序。 Sorted 也是一个高阶函数,可以接受一个 key 函数。 key 指定的函数会作用于列表的每个元素,并根据 key 函数返回的结果进行排序。
arr = [23,0,45,-13,46,85,-70];
print('sorted(arr)
sorted(arr))
#sorted(arr): [-70, -13, 0, 23, 45, 46, 85]
print('sorted(arr,key=abs):'
sorted(arr,key=abs))
print('sorted(arr,key=abs,reverse=True)'
sorted(arr,key=abs,reverse=True))
//运行结果:
//sorted(arr,key=abs): [0, -13, 23, 45, 46, -70, 85]
//sorted(arr,key=abs,reverse=True) [85, -70, 46, 45, 23, -13, 0]
返回函数
高阶函数不仅可以接受函数作为参数,还可以将函数作为返回值返回。
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
f = lazy_sum(1,2,3,4,5)
print(f)
print('f()=',f())
//运行结果:
//.sum at 0x109c85950>
//f()= 15
#运行结果表明,当我们调用lazy_sum的时候并不直接返回计算结果,而是返回sum函数,当我们执行f()的时候才会计算结果*
匿名函数
有时当我们将函数作为参数传入时,不必每次都显式定义它。 Python 提供 lambda 来创建匿名函数。一个匿名函数现在只有一个表达式,不用写return,表达式的结果是返回值的匿名函数没有名字,所以不存在函数名冲突的问题。使用匿名函数有利于减少代码,这也符合python的概念。
s = reduce(lambda x,y: x+y,[1,2,3,4,5])
print('s=',s)
//运行结果:
//s= 15
偏函数
我理解的偏函数的功能是这样的:
假设你有一个这样的功能:它的功能是向人们问好
def sayHello(name,greet):
print(greet,name)
假设你接下来想用一百种方式问候一个叫“小明”的人。如果你知道默认参数,那你当然会想用它,但是考虑到每次都传入太麻烦,所以:
def sayHelloToXiaoMing(greet,name='xiaoMing'):
return sayHello(name,greet)
sayHelloToXiaoMing('I love U');
其实sayHelloToXiaoMing是sayHello的一个部分函数。那么偏函数的作用是什么? ?没错,偏函数就是帮助我们直接创建偏函数,不需要我们自己创建:
from functools import partial
sayHelloToTom = partial(sayHello,'Tom')
sayHelloToTom('Sawadika')
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python isidentifier()方法是什么11/10
- ♥ python标记去除过程12/03
- ♥ 在 python 列表中使用 sort() 参数11/04
- ♥ 图解 Git,一目了然!02/17
- ♥ python 线程模块创建线程01/05
- ♥ python有数组吗10/04
内容反馈