0

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

1 に答える 1

2

通常、ゼロ値を推測することは不可能です。iterable が引数なしのコンストラクターを持たないユーザー定義クラスのインスタンスを生成する場合はどうなるでしょうか? そして、あなたが示したように、それを自分で提供するのは簡単です。

于 2012-06-12T19:00:36.037 に答える