0
def sum_specified_dims(mdd, dims, keys = [], result = {}):
    for key,value in mdd.items():
        keys.append(key)
        if type(value) == dict:
            sum_specified_dims(value, dims, keys, result)
        else:
            pointer = result
            for dim in dims:
                index = dim - 1
                key_value = keys[index]
                if not key_value in pointer:
                    pointer[key_value] = {}
                pointer = pointer[key_value]
            if key_of_sum in pointer:
                pointer[key_of_sum] += value
            else:
                pointer[key_of_sum] = value
        keys.pop()
    return result

key_of_sum='total'
keys=[1]
import datetime
mdd={datetime.date(2013, 7, 16): {3.0: {'2.0': 8}}}
>>> sum_specified_dims(mdd,keys)
{datetime.date(2013, 7, 16): {'total': 8}}
>>> sum_specified_dims(mdd,keys)
{datetime.date(2013, 7, 16): {'total': 16}}
>>> sum_specified_dims(mdd,keys,[],{})
{datetime.date(2013, 7, 16): {'total': 8}}

3番目、4番目のパラメーターを省略すると、結果は毎回累積されます。

ただし、パラメータを省略しなくても問題ありません。

なぜこれが起こるのか誰でも説明できますが、それはPythonのバグですか?

アップデート

それは常に起こるとは限りません:

>>> def f(a=2):
...     print a
... 
>>> f(3)
3
>>> f()
2
4

1 に答える 1

3

その理由は、Python の変更可能な (リストなどの) デフォルト引数が以前の値を「記憶」しているためです。

興味深い説明については、http://effbot.org/zone/default-values.htmを参照してください。

于 2013-07-23T07:26:57.563 に答える