Python ha construido en función de sum
, que es efectivamente equivalente a:suma Python, ¿por qué no las cadenas?
def sum2(iterable, start=0):
return start + reduce(operator.add, iterable)
para todo tipo de parámetros, excepto cuerdas. Funciona para números y listas, por ejemplo:
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
¿Por qué las cadenas se omitieron especialmente?
sum(['foo','bar'], '') # TypeError: sum() can't sum strings [use ''.join(seq) instead]
sum2(['foo','bar'], '') = 'foobar'
Creo recordar las discusiones en la lista de Python por la razón, por lo que una explicación o un enlace a un tema explicando que estaría bien.
Editar: Soy consciente de que la forma estándar es hacer "".join
. Mi pregunta es por qué la opción de usar sum para cadenas fue prohibida, y no hubo prohibición para, por ejemplo, listas.
Editar 2: Aunque creo que esto no es necesario dado todas las buenas respuestas que obtuve, la pregunta es: ¿Por qué funciona suma en una iterable que contenga números o un iterable que contiene las listas, pero no un iterables que contiene cadenas?
Porque no tiene sentido "sumar" cadenas. – NullUserException
@NullUserException: tiene tanto sentido "sumar" cadenas como lo es para "sumar" listas. –
@Muhammad Alkarouri: al sumar una secuencia, se suman los elementos de la secuencia. ¿Cuáles son los elementos de una cadena? Caracteres individuales, que son, todavía, no números. No puedes sumarlos. Podría "concatenarlos", pero, curiosamente, ya están concatenados en la cadena. –