Python3快速入门——(10)函数式编程(Functional Programming)

#函数本身也可以赋值给变量,即:变量可以指向函数
f=abs #abs()和f()等价了 变量可以指向函数,函数名也是变量
g=f(-10) #10
#变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
def add(x,y,f): #简单的高阶函数
return f(x)+f(y)
g=add(-1,5,abs) #6

(1)高阶函数
#map函数
#map()函数接收两个参数,一个是函数,一个是Iterable
# map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
L=[1,2,3,4,5,6,7,8,9]
def f(x):
return x*x
r=map(f,L) #map()传入的第一个参数是f,即函数对象本身。
m=list(r) #由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list
print(m) #[1, 4, 9, 16, 25, 36, 49, 64, 81]
r=map(str,L) #把列表L的所有数字转化为字符串
#reduce函数
#reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,
# reduce把结果继续和序列的下一个元素做累积计算
from functools import reduce
L=[1,2,3,4,5]
def add(x,y):
return x+y
m=reduce(add,L) #15
#定义一个字符串转整数的函数(str2int)\
from functools import reduce
DIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def str2int(s):
def fn(x,y):
return 10*x+y
def char2num(s):
return DIGITS[s]
return reduce(fn,map(char2num,s))
#filter()函数用于过滤序列
#filter()也接收一个函数和一个序列
#filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
def is_odd(n): #定义一个函数,在一个list中,删掉偶数,只保留奇数
return n%2==1
m=list(filter(is_odd,[1,2,3,4,5,6,7])) #[1, 3, 5, 7]
#filter()函数返回的是一个Iterator,也就是一个惰性序列,
# 所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list
#sorted()函数排序函数
#可以接收一个key函数来实现自定义的排序
L=[11,2,4,-12,-15,17]
m=sorted(L) #[-15, -12, 2, 4, 11, 17]
m=sorted(L,key=abs) #按绝对值大小排序,并按照对应关系返回list相应的元素[2, 4, 11, -12, -15, 17]
S=['Bob','Ann','cll','Zmm','alt']
s=sorted(S) #对字符串排序,是按照ASCII的大小比较的['Ann', 'Bob', 'Zmm', 'alt', 'cll']
s=sorted(S,key=str.lower) #实现忽略大小写的排序['alt', 'Ann', 'Bob', 'cll', 'Zmm']
s=sorted(S,key=str.lower,reverse=True) #进行反向排序['Zmm', 'cll', 'Bob', 'Ann', 'alt']

(2)匿名函数
#lambda匿名函数
#匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
L=[1,2,3,4,5,6,7,8,9]
m=list(map(lambda x:x*x,L)) #关键字lambda表示匿名函数,冒号前面的x表示函数参数
print(m) #[1, 4, 9, 16, 25, 36, 49, 64, 81]

(3)partial偏函数
#partial偏函数
#functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数
import functools
int2=functools.partial(int,base=2) #二进制转换为十进制整数
m=int2('10000') #16


Python3快速入门——(10)函数式编程(Functional Programming)





上一篇:python3的zip函数


下一篇:大牛讲堂 | 深度学习Sequence Learning技术分享