知行编程网知行编程网  2022-11-14 20:30 知行编程网 隐藏边栏  7 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python的函数式编程的相关知识,希望可以帮到处于编程学习途中的小伙伴

函数式编程是一种高度抽象的编程范式。用纯函数式编程语言编写的函数没有变量。因此,对于任何函数,只要输入是确定性的,输出就是确定性的。我们称之为纯函数。因为没有副作用。函数式编程的特点之一是允许函数接收函数作为参数,并将函数作为返回值返回。 Python 为函数式编程提供部分支持。 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')

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享