2010-12-28 13 views
7

En la función suma, el prototipo es suma (iterable [, Inicio]), que resume todo en el objeto iterable más el valor inicial. Me pregunto por qué hay un valor de inicio aquí? ¿Hay algún caso particular de uso que este valor sea necesario?por qué hay un argumento de inicio en función suma integrada de pitón

No proporcione más ejemplos de cómo se usa el inicio. Me pregunto por qué existe en esta función. Si el prototipo de la función suma es solo suma (iterable) y devuelve None si iterable está vacío, todo funcionará. Entonces, ¿por qué necesitamos comenzar aquí?

Respuesta

15

Si está sumando elementos que no son enteros, es posible que deba proporcionar un valor de inicio para evitar un error.

>>> from datetime import timedelta 
>>> timedeltas = [timedelta(1), timedelta(2)] 

>>> sum(timedeltas) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta' 

>>> sum(timedeltas, timedelta()) 
datetime.timedelta(3) 
+7

y más generalmente 'sum' es una especie de función [foldr] (http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29) que podría requerir un valor inicial (z * * en el artículo de Wikipedia). –

+1

Aprendí algo nuevo hoy. – kindall

+0

Eso es porque el inicio está predeterminado en 0, y timedelta no puede agregar int. Si originalmente no hay un param inicial, no existirá ningún problema aquí. Entonces, ¿por qué hay un param inicial después de todo? – FrostNovaZzz

Cuestiones relacionadas