2011-08-26 28 views

Trả lời

21

Vâng .... bạn gọi hàm được trang trí và thay đổi giá trị trả về:

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

tôi sẽ cố gắng để được khá chung ở đây vì đây có lẽ là một ví dụ đồ chơi, và bạn có thể cần một cái gì đó tham số:

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

có! nó được làm việc. và bạn càng thêm kiểm tra mutableMapping. nó là tuyệt vời. – libaoyin

Các vấn đề liên quan