场景模拟:实现一个列表内所有元素 *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 函数 按照顺序处理数据,不打乱顺序
格式 : map(方法,实参)
极大的压缩了代码量
1 num_1 = [1,2,10,5,3,7]2 res = map(lambda x:x+1,num_1)
3 print("内置函数map处理结果",list(res))