map() reduce()

1 高阶函数

  既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

1 def f01(x, y) :
2     return x * y
3     
4 def f02(x, y, f) :  # 函数名作为参数
5     return f01(x, y)
6     
高阶函数例子

2 map()

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

1 def f03(x) :
2     return x + 1
3 a = [1,2,3]
4 print('map()前',a)
5 a = list(map(f03, a)) # 利用map()给a列表的每个元素进行+1操作
6 print('map()后', a)
map()简例

  注意:map()传入的第一个参数是f,即函数对象本身。由于结果r是一个IteratorIterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

3 reduce()

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

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

1 def f01(x, y) :
2     return x * y
3 b = [1,2,3,4]
4 from functools import reduce
5 b = reduce(f01, b)
6 print('reduce()后的结果', b)
7 # 运行结果: reduce()后的结果 24
reduce()简例

4 map() 和 reduce()的综合应用

 1 def str_float(s) :
 2     def str_num(s) :
 3         return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
 4 
 5     n = s.index('.') # 计算 . 在字符串中的位置
 6     
 7     str01 = s[0:n] + s[n+1:] # 用于存储除去 . 过后的字符串
 8     print(str01)
 9     print('str01_type', type(str01))
10     
11     lis01 = list(map(str_num, str01)) # 将去除 . 过后的字符串变成列表,并存放在lis01中
12     print(lis01)
13     print('lis01_type', type(lis01))
14     
15     p = len(s) - n - 1 # 计算 . 后面还有多少位数字
16     
17     def num_int(x, y) :
18         return (x * 10) + y
19     from functools import reduce
20     return reduce(num_int, lis01) / pow(10, p)
21 a = '12.123'
22 print('', type(a), a)
23 a = str_float(a)
24 print('', type(a), a)
综合应用

 

posted @ 2017-03-14 16:39  寻渝记  阅读(253)  评论(0编辑  收藏  举报