2011-08-26 9 views

Respuesta

21

Bueno .... se llama a la función decorada y cambia el valor de retorno:

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

voy a tratar de ser bastante general aquí, ya que esto es probablemente un ejemplo de juguete, y usted puede ser que necesite algo con parámetros:

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

Sí! está trabajado. y más agrega una verificación mutableMapping. es grandte. – libaoyin

Cuestiones relacionadas