2013-07-23 2 views
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 번째 매개 변수를 생략하면 매번 누적됩니다.결과가 매번 변경되는 이유는 무엇입니까?

매개 변수를 생략하지 않더라도 괜찮습니다.

누구나 이런 일이 일어날 수 있는지 설명 할 수 있습니다. 파이썬 버그입니까?

UPDATE

항상없는 것 같다 일이 :

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

@Blender, 나는 그것이 발생하지 않을 때 예제를 제공했다. – user2559257

+0

정수는 불변이고 목록과 사전은 변경할 수 있습니다. 그것은 모두 연결된 질문에 설명되어 있습니다. – Blender

+0

@ user2559257 : 그럴 경우 기본 인수를 변경하지 않았습니다. –

답변

관련 문제