Python 对非整数iterable使用内置sum()函数
有没有办法重载内置函数sum(),使其在用户定义的iterable上工作?假设iterable中的元素可以使用+添加。例如字符串 具体来说,我希望能够做到以下几点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中所有字符
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核心开发人员。