reduce()函数和lambda表达式常常能够言简意赅的表达我们想要的公式,但是问题也随之而来:即表达式尝尝难以捉摸,看似高深莫测。这里,我们简单地探讨一下这两个表达式。如果后续学习中再次遇到这个问题,会继续补充。同时,也恳请博友指教和补充,大家共同进步。
首先,我们来探讨一下reduce()函数。
python的reduce()内建函数是一个二元操作函数,用来将一个数据集合(链表,元组等)中的所有数据进行function函数操作:用传给reduce()的函数 function()(必须是一个二元操作函数)对数据集合中的第1,2个数据进行操作,得到的结果再与第三个数据使用function()函数运算。如此迭代,直到最后得到一个结果。
reduce()的函数原型是: reduce(function(), iterable[, initializer]),返回值是一个单值;
def add(x,y):结果为55
return x+y
sum = reduce(add,[1,2,3,4,5,6,7,8,9,10])
print(sum)
注:在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce。
深一步:参考来自:http://www.68idc.cn/help/jiabenmake/python/20150310262907.html
l = []
def add(x,y):
l.append((x,y))
end = x + y
return end
sum = reduce(add,[1,2,3,4,5,6,7,8,9,10])
print(sum)
print(l)
输出结果为:
reduce(function(),data) 函数对作为其参数的函数function()是有要求的,要求这个函数function()能接受两个参数。第一个参数的值是前期计算积累的值,而第二个参数的值是 reduce() 函数参数中的data序列的下一个元素。其实 reduce 函数中还有第三个可选的参数初始值,如果这个参数为空则初始值默认为序列的第一个元素,所以上面可以看到第一次调用这个函数是以序列的第一个和第二个元素作为参数的。最终,最后一次调用返回的值作为 reduce 函数的返回值。
其次,我们来探讨学习一下lambda表达式。
表达式 = lambda [parameters,即参数] : [func,即执行的运算过程]
接着,我们将两者混合使用,以更清楚地明白其运算过程:
range(1,7)=[1,2,3,4,5,6,7]。每次传递两个参数给lmd_f,同时lmd_f返回一个值,该返回值作为下一次lmd_f执行运算的第一个参数(第一次时,默认第一个参数由range的第一个参数提供)。