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
。我的问题是为什么禁止使用 sum 作为字符串的选项,并且没有禁止例如列表。
编辑 2:虽然我认为鉴于我得到的所有好的答案都不需要这样做,但问题是:为什么 sum 对包含数字的可迭代对象或包含列表的可迭代对象起作用,但对包含字符串的可迭代对象不起作用?