day11 map函数

 
场景模拟:实现一个列表内所有元素 *2 的效果

普通的实现方式
单个列表是可以做到很轻松的实现,但是如果我又多个列表都要这个操作,那每个都操作就会重复代码
1 ret = []
2 num_1 = [1,2,10,5,3,7]
3 for i in  num_1:
4     ret.append(i ** 2)
5 print(ret)

用函数实现减少重复代码,但是看起来代码的量不少
而且用这种参数代入的方式也会出现限定的感觉,比如现在我运算方法又变了呢
1 num_1 = [1,2,10,5,3,7]
2 num1_1 = [1,2,10,5,3,7]
3 def map_tes    (array):
4     ret = []
5     for i in  array:
6         ret.append(i ** 2)
7     return ret
8 print(map_tes(num1_1))
9 print(map_tes(num_1))

单参数只能传要处理的数据,运行的方法是写死的
运算方法函数化,双参数传入数据和规定运算可以大幅升级代码
代价是代码更复杂更长,当然可以使用匿名函数简写代码
 1 num_1 = [1,2,10,5,3,7]
 2 num1_1 = [1,2,10,5,3,7]
 3 def add_one(x):
 4     return x+1
 5 # lambda x:x+1
 6 def reduce_one(x):
 7     return x-1
 8 # lambda x:x-1
 9 def map_test(func,array):
10     ret = []
11     for i in  array:
12         res = func(i)
13         ret.append(res)
14     return ret
15 print(map_test(add_one,num1_1))
16 print(map_test(lambda x:x+1,num1_1))  # 等效上一条
17 print(map_test(reduce_one,num_1))
18 print(map_test(lambda x:x-1,num_1))   # 等效上一条
根据现有的知识能做到的最好的终极版本
1 num_1 = [1,2,10,5,3,7]
2 def map_test(func,array):
3     ret = []
4     for i in  array:
5         res = func(i)
6         ret.append(res)
7     return ret
8 map_test(lambda x:x+1,num_1)
 map 函数 按照顺序处理数据,不打乱顺序
1 num_1  = [1,2,10,5,3,7]
2 map(lambda x:x+1,num_1)
3 res = map(lambda x:x+1,num_1)
4 print("内置函数map处理结果",list(res)) 

猜你喜欢

转载自www.cnblogs.com/shijieli/p/9689785.html