2011-08-26 4 views

답변

21

을 .... 당신이 장식 된 함수를 호출하고 반환 값 변경 :

def dec(func): 
    def wrapper(*args, **kwargs): 
     result = func(*args, **kwargs) 
     result['c'] = 3 
     return result 
    return wrapper 
7

이 아마 장난감 예이기 때문에 내가 여기에 매우 일반적인 일하려고합니다, 당신은 매개 변수가 뭔가해야 할 수 있습니다

from collections import MutableMapping 

def map_set(k, v): 
    def wrapper(func): 
     def wrapped(*args, **kwds): 
      result = func(*args, **kwds) 
      if isinstance(result, MutableMapping): 
       result[k] = v 
      return result 
     return wrapped 
    return wrapper 

@map_set('c', 3) 
def foo(r=None): 
    if r is None: 
     return {'a':1, 'b':2} 
    else: 
     return r 

>>> foo() 
{'a': 1, 'c': 3, 'b': 2} 

>>> foo('bar') 
'bar' 
+0

예를! 그것은 효과가있다. mutableMapping 검사를 추가하면됩니다. 그것은 greate입니다. – libaoyin

관련 문제