Blogger Information
Blog 13
fans 0
comment 0
visits 28455
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Python的函数式编程
python自学网
Original
1248 people have browsed it

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。函数式编程的一个特点就是,允许函数接收函数作为参数,也允许把函数作为返回值返回。Python对于函数式编程提供部分支持。由于Python允许使用变量,因此Python不是纯函数式编程语言。

5d10639b9fba6889.jpg

高阶函数

所谓高阶函数,就是允许函数的参数接收其他函数 下面介绍几个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指定的函数将作用于list的每个元素上,并根据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)

假设接下来你要对名字是'xiaoMing'这个人,用一百种方式跟他打招呼。

 如果你知道默认参数,那么你肯定会想到用它,当然没错,但是考虑到每次传入实在是太麻烦了,所以:

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')
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments