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?
UPDATE
, кажется, не всегда бывает:
>>> def f(a=2):
... print a
...
>>> f(3)
3
>>> f()
2
@Blender, я привел пример, когда этого не происходит. – user2559257
Целые числа неизменны, а списки и словари изменяемы. Все это объясняется связанным вопросом. – Blender
@ user2559257: вы этого не сделали, вы не мутируете аргумент по умолчанию в этом случае. –