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
>>>