【发布时间】:2026-01-31 02:50:01
【问题描述】:
有没有办法重载内置函数 sum() 以便它在用户定义的可迭代对象上工作?假设可以使用 + 添加迭代中的元素。例如字符串。
具体来说,我希望能够做到以下几点
S = StrListIterable([<list of strings>])
concatedList = sum(S) # returns a concatenated string of all strings in S
显然,我可以在 S 的元素上使用简单的 join 语句来实现这一点,但我想知道 Python 是否支持重载某些标准内置函数。
【问题讨论】:
-
您应该能够检查
sum使用的方法并拥有一个实现它的类 -
您已经可以将它用于除整数之外的可迭代对象。它只是有一个特定的块来防止你在字符串上使用它。
-
sum当然可以使用非数字类型,你只需要给它一个合适的起始值。但是,正如thesumdocs 和这里的几个人所提到的,如果您尝试使用它来连接字符串,它会抱怨。但是您可以使用sum(list_of_lists, [])来连接一堆列表。 -
sum不会连接字符串的原因是与使用.join相比效率低下。类似的评论适用于通过reduce进行的字符串连接,尽管使用reduce(或+=在for循环中)并不像在Python 2.5 之前那么糟糕,因为str已经进行了一些优化来处理这个问题连接类型,因为很多人使用+连接而不是.join。有些人对此不很满意,例如 Python core dev Alex Martelli。