Python学习笔记系列——高阶函数(map/reduce)

一、map

#变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数被称之为高阶函数
def add(x,y,f):
    return f(x)+f(y)
print(add(-5,-9,abs))

'''  map()函数接受两个参数,一个是函数,一个是Iterable。map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterable返回。
举例函数作用说明:把f(x)作用在list的每一个元素并把结果生成一个新的list。  '''
def f(x):
    return x*x
r=map(f,[1,2,3,4,5,6])
print(list(r))

L=list(map(str,[1,4,7,2,5,8]))
print(L)

二、reduce

from functools import reduce
'''  reduce把一个函数作用在一个序列上,这个函数必须接受两个参数,reduce把结果继续和序列的下一个元素做累积计算。
即reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)  '''
#将序列[1,5,9]转换成整数159
def add(x,y):
    return x*10+y
result=reduce(add,[1,5,9])
print(result)

#将str类型转换成int
def fn(x,y):
    return x*10+y
def char2num(s):
    digite =  {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return digite[s]
ms=reduce(fn,map(char2num,'13579'))
print(ms)

三、练习

#首字母大写
def normallize(name):
    return name.capitalize()
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normallize,L1))
print(L2)

#接收一个list并求积
def prod(x,y):
    return x*y
r1 = [3,5,7,9]
r2 = reduce(prod,r1)
if r2 ==945:
    print('procedure success')
else:
    print('procedure fail')

#把字符串'123.456'转换成浮点数123.456
def str2float(s):
    def fun(x,y):
        return x*10+y
    def char2num(s):
        digite = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digite[s]
    n=s.index('.')
    s1=list(map(char2num,s[:n]))    #s1 = list(map(int, s[:n]))
    s2=list(map(char2num,s[n+1:]))  #s2 = list(map(int, s[n+1:]))
    return reduce(fun,s1)+reduce(fun,s2)/10**len(s2)
print(str2float('123.456'))

 

___愿先生心境,四季如春

posted @ 2018-11-29 18:39  zzz紫川  阅读(498)  评论(0编辑  收藏  举报