def now():
print('2016-06-03')
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log('rain:')
def now():
print('2016-06-03')
now()
像上面那样,装饰后的函数的 __name__
已经从 now
变成了 wrapper
,为什么?
équivaut à
now
devenirlog('rain:')(原来的now)
Ensuite, expliquez pourquoi __name__ est un wrapper
D'après https://docs.python.org/2.7/library/inspect.html
Donc
__name__
est basé sur la définition spécifiqueComme un autre exemple
La fonction décorée n'est en fait pas la fonction now
Mais log("rain")(now)
En fait, c'est le wrapper que vous avez défini.
Pour ce problème, il existe des wraps dans functools qui peuvent définir correctement __name__ et autres