使用三个参数减少功能

时间:2013-10-25 11:58:27

标签: python python-3.x reduce initializer

reduce函数如何在python3中使用三个参数而不是两个参数。 所以,对于两个,

tup = (1,2,3)
reduce(lambda x, y: x+y, tup)

我得到了这个。这只是总结tup中的所有元素。但是,如果你给reduce函数三个参数,如下所示,

tup = (1,2,3)
reduce(lambda x, y: x+y, tup, 6)

这会给你一个12的值。 我检查了python3的文档,它说第三个参数是初始化器。那就是说,如果没有插入第三个参数,那么默认初始化器是什么?

3 个答案:

答案 0 :(得分:15)

如果省略第三个参数,则tup中的 first 值将用作初始值。

或者,换句话说,reduce()将可选的第3个参数放在第二个参数的值之前(如果存在)。

此外,这意味着如果第二个参数是序列,则第三个参数用作默认值,就像第二个参数只有一个元素一样(和没有显式的初始化参数),将是默认的返回值。

functools.reduce() documentation包含函数的Python版本:

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

请注意,initializer(如果不是None)用作第一个值而不是iterable中的第一个值。

答案 1 :(得分:0)

reduce 可选的第三个参数:

>>> import functools
>>> test = []
>>> functools.reduce((lambda x,y: x+y), test, "testing")

答案 2 :(得分:0)

提供一个元组作为第三个参数,我们将能够通过减少多个值来计算和返回。

from functools import reduce
def mean(my_list):                  # == sum(my_list) / len(my_list)
    return (lambda x: x[0]/x[1]) (reduce(lambda x, y : (x[0]+y, x[1]+1), 
                                                my_list, (0, 0,)))