Reducir la función con tres parámetros.

¿Cómo funciona reduce función reduce en python3 con tres parámetros en lugar de dos? Así que, para dos,

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

Me sale este. Esto sólo resumiría todos los elementos en tup . Sin embargo, si le das a la función reduce tres parámetros como este a continuación,

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

Esto le daría un valor de 12 . Verifiqué en la documentación de python3 y dice que el tercer argumento es un inicializador. Dicho esto, ¿cuál es el inicializador predeterminado si no se inserta el tercer argumento?

Si omite el tercer parámetro, entonces el primer valor de tup se usa como inicializador.

O, para decirlo de otra manera, reduce() coloca el tercer parámetro opcional antes de los valores del segundo argumento, si está presente.

Además, eso significa que si el segundo argumento es una secuencia vacía , ese tercer argumento sirve como predeterminado, solo como un segundo argumento con un solo elemento (y ningún argumento de inicializador explícito) sería el valor de retorno predeterminado.

La documentación de functools.reduce() incluye una versión de Python de la función:

 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 

Observe cómo el initializer , cuando no es None , se utiliza como primer valor en lugar de un primer valor de iterable .

reducir el tercer argumento opcional:

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

Al proporcionar una tupla como un tercer parámetro, podremos calcular y regresar a partir de la reducción de múltiples valores.

 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,)))