2011-08-26 11 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

関連する問題