Ответ 1
Хорошо... вы вызываете украшенную функцию и меняете возвращаемое значение:
def dec(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
result['c'] = 3
return result
return wrapper
Я хочу создать декоратор, чтобы изменить возвращаемое значение функции следующим образом: Как это сделать, как показано ниже?:
def dec(func):
def wrapper():
#some code...
#change return value append 'c':3
return wrapper
@dec
def foo():
return {'a':1, 'b':2}
result = foo()
print result
{'a':1, 'b':2, 'c':3}
Хорошо... вы вызываете украшенную функцию и меняете возвращаемое значение:
def dec(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
result['c'] = 3
return result
return wrapper
Я постараюсь быть довольно общим здесь, так как это, вероятно, пример игрушки, и вам может понадобиться что-то параметризованное:
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'