Python имеет встроенную функцию sum
, которая фактически эквивалентна:
def sum2(iterable, start=0):
return start + reduce(operator.add, iterable)
для всех типов параметров, кроме строк. Он работает для чисел и списков, например:
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
Почему строки были специально исключены?
sum( ['foo','bar'], '') # TypeError: sum() can't sum strings [use ''.join(seq) instead]
sum2(['foo','bar'], '') = 'foobar'
Кажется, я помню обсуждения в списке Python по причине, поэтому объяснение или ссылка на поток, объясняющий это, были бы хороши.
Изменить. Я знаю, что стандартным способом является "".join
. Мой вопрос в том, почему вариант использования суммы для строк был запрещен, и никаких запретов не было, например, для списков.
Изменить 2. Хотя я считаю, что это не нужно, учитывая все хорошие ответы, которые я получил, возникает вопрос: почему суммирование работает над итерабельными номерами или списком с итерабельными списками, но не является итерируемым содержащие строки?