python之高阶函数--map()和reduce()

时间:2021-08-12 18:47:35

以下为学习笔记:来自廖雪峰的官方网站

1.高阶函数:简单来说是一个函数里面嵌入另一个函数

2.python内建的了map()和reduce()函数

map()函数接收两参数,一个是函数,一个是Iterable.    map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterable返回

例子:

#map函数
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) #map函数返回一个函数和一个Iterable
print r

#将数字作为字符串输出

print(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))


reduce()函数:把一个函数作用在一个序列【x1,x2,x3,...】上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累计计算,其效果就是
reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)

3.练习题1:将名字规范化
def normalize(name):   #规范名字的写法
name = name[0].upper() + (name[1:]).lower()
return name

r = map(normalize, ['LISA', 'adam', 'BaRt'])
print r

练习题2:#python提供sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list,并求和
from functools import reduce

l = [3, 5, 7, 9]
def prod(a, b):
return a * b

print(reduce(prod, l))

练习题3.#利用map和reduce编写一个str2float函数,把字符串‘123.456’变成123.456
from functools import reduce

def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2float(s):
s = s.split('.')
if len(s[0]) == 0:
s[0] = '0'
return (reduce(lambda x, y: x * 10 + y, map(char2num, s[0]))) + \
(reduce(lambda x, y: x * 10 + y, map(char2num, s[1]))) * pow(0.1, len(s[1]))

print(str2float('123.456'))