为什么sum无法自动获取正确的零值?
>>> sum((['1'], ['2']))
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
sum((['1'], ['2']))
TypeError: unsupported operand type(s) for +: 'int' and 'list'
>>> sum((['1'], ['2']), [])
['1', '2']
这样实现起来很简单:
>>> def sum(s, start=None):
it = iter(s)
n = next(it)
if start is None:
start = type(n)()
return n + __builtins__.sum(it, start)
>>> sum((['1'], ['2']))
['1', '2']
>>>
但总和不会加入字符串,所以也许只是鼓励使用适当的方法来进行不同的“总结”。
另一方面,如果它仅用于数字,为什么不sum_numbers
而不是sum
作为名称。
编辑:要处理空序列,我们必须添加一些代码:
>> sum([])
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
sum([])
File "<pyshell#28>", line 3, in sum
n = next(it)
StopIteration
>>> def sum(s, start=None):
it = iter(s)
try:
n= next(it)
except:
return 0
if start is None:
start = type(n)()
return n + __builtins__.sum(it, start)
>>> sum([])
0
>>>
答案 0 :(得分:2)
在一般情况下,推断零值是不可能的。如果iterable生成没有零参数构造函数的用户定义类的实例,该怎么办?正如您所展示的那样,您可以轻松自行提供。