Python 对非整数iterable使用内置sum()函数

Python 对非整数iterable使用内置sum()函数,python,sum,iterable,Python,Sum,Iterable,有没有办法重载内置函数sum(),使其在用户定义的iterable上工作?假设iterable中的元素可以使用+添加。例如字符串 具体来说,我希望能够做到以下几点 S = StrListIterable([<list of strings>]) concatedList = sum(S) # returns a concatenated string of all strings in S S=strliterable([] concatedList=sum(S)#返回S中所有字符

有没有办法重载内置函数sum(),使其在用户定义的iterable上工作?假设iterable中的元素可以使用+添加。例如字符串

具体来说,我希望能够做到以下几点

S = StrListIterable([<list of strings>])
concatedList = sum(S) # returns a concatenated string of all strings in S
S=strliterable([]
concatedList=sum(S)#返回S中所有字符串的串联字符串

显然,我可以在S元素上使用一个简单的join语句来实现这一点,但我想知道Python是否支持重载一些标准内置函数。

start参数提供了一个初始值来添加。但是:

>>> L = ['foo', 'bar', 'baz']
>>> sum(L, '')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
>>> ''.join(L)
'foobarbaz'
>L=['foo','bar','baz']
>>>总和(L,,)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:sum()无法对字符串求和[改用''连接(seq)]
>>>''加入(L)
“foobarbaz”

您应该能够检查
sum
使用的方法,并拥有一个实现该方法的类。您已经可以在除整数以外的许多事物上使用它了。它只是有一个特定的块来阻止您在字符串上使用它。
sum
当然可以处理非数字类型,您只需要给它一个合适的起始值。然而,正如和这里的一些人所提到的,如果您试图使用它来连接字符串,它会抱怨。但是你可以做,例如,
sum(list of_list,[])
来连接一组列表。
sum
不会连接字符串的原因是,与使用
.join
相比,它效率低下。类似的注释适用于通过
reduce
进行的字符串连接,尽管在
循环中使用
reduce
(或
+=
)不像Python 2.5之前那么糟糕,因为
str
已经对处理这种类型的连接进行了一些优化,因为很多人使用
+
连接而不是
。join
。有些人对此不满意,例如Python核心开发人员。