基础篇_010_函数_reduce()整合函数

----引导 ===》  

  1. 不多bb,直接上需求"有一个数字列表: num_list = [1, 2, 3, 100],现在将列表中的所有元素累加得到一个数" ===》

# 1. 函数封装逻辑代码
num_list = [1, 2, 3, 100]
def my_reduce(li):
    result = 0
    for item in li:
        result += item
    return result
print(my_reduce(num_list))  # 输出:106

  2. 老规矩,需求又变了: "我不要累加了,弄个累乘来呗"。得,这人呐,他活着就是要折腾 ===》

# 2. "函数即变量"
num_list = [1, 2, 3, 100]
def my_reduce(func, li):
    result = li.pop(0)
    for item in li:
        result = func(result, item)
    return result
print(my_reduce(lambda x, y:x * y, num_list))  # 输出:600
print(my_reduce(lambda x, y:x + y, num_list))  # 输出:105
# 至于这里为什么是105,以后提到"深浅拷贝"的时候再说,
# 解决方法就是将上面一行注释掉,禁止更改num_list,这时最前面的1就会被加上

  3. 按老规矩在这儿就应该结束的啊,卧槽,怎么还有?没错,需求又变了,而且是不按套路的变化: "在这基础之上,我需要增加一个参数: 初始化参数。它的作用就是用来初始化return的result" ===》

# 3. 新增一个init参数
num_list = [1, 2, 3, 100]
def my_reduce(func, li, init = None):
    if init == None:
        result = li.pop(0)
    else:
        result = init
    for item in li:
        result = func(result, item)
    return result
print(my_reduce(lambda x, y:x * y, num_list, 100))  # 输出:60000

 

----reduce(funciton, iterable, initial)函数 ===》

  这个函数的作用从表面上不好一眼看出,但是从刚才的几个例子大家应该隐隐约约有点感觉了。它的作用就是整合一个可迭代对象,整合就意味着要减少: reduce。至于python为啥不用integration这个单词,我觉得这个单词也许已经和整数之类的产生了一些不可描述的感情。

  知道了reduce()这个函数,那怎么用呢?这里面牵扯到又一个重要的东西: 模块。这个现在我们知道怎么用就行了,以后再细说 ===》

from functools import reduce  # 从functools包中导入reduce模块

num_list = [1, 2, 3, 100]
print(reduce(lambda x, y:x + y, num_list, 100)) # 输出:206
print(reduce(lambda x, y:x * y, num_list)) # 输出:600
print(reduce(lambda x, y:x * y, num_list, 100)) # 输出:60000

 

----写在最后 ===》

  最后在这里忍不住插一句,在大数据中有一个很重要的概念: map-reduce。map就是指映射: 在原有的列表等数据的基础之上做函数的映射操作,然后得到新的列表数据;reduce就是整合: 将所有的数据压在一起,得出一个最终的结果。

 

posted @ 2020-02-22 21:24  BNTU  阅读(191)  评论(0)    收藏  举报