Python dispose d'une fonction intégrée sum
, ce qui est équivalent à:
def sum2(iterable, start=0):
return start + reduce(operator.add, iterable)
pour tous les types de paramètres, à l'exception des chaînes de caractères. Il travaille pour des nombres et des listes, par exemple:
sum([1,2,3], 0) = sum2([1,2,3],0) = 6 #Note: 0 is the default value for start, but I include it for clarity
sum({888:1}, 0) = sum2({888:1},0) = 888
Pourquoi les chaînes spécialement de côté?
sum( ['foo','bar'], '') # TypeError: sum() can't sum strings [use ''.join(seq) instead]
sum2(['foo','bar'], '') = 'foobar'
Je me rappelle des discussions dans la liste Python pour la raison, donc, une explication ou un lien vers un thread à l'expliquer, ce serait bien.
Edit: je suis conscient que la norme est de faire "".join
. Ma question est pourquoi l'option de l'utilisation de la somme pour les chaînes a été interdit, et pas de bannissement était là pour, par exemple, des listes.
Edit 2: Bien que je crois que ce n'est pas nécessaire étant donné toutes les bonnes réponses que j'ai eu, la question est: Pourquoi la somme de travail sur un objet iterable contenant des nombres ou un objet iterable contenant des listes, mais pas un objet iterable contenant des chaînes de caractères?