最近我在學Python裝飾器和使用functools.wraps
。python裝飾器如何更改__name__
def a():
def b():
def c():
print('hello')
return c
return b
print a.__name__
#output:a
我明白爲什麼輸出a.But我不知道如何在下面的代碼__name__
變化。
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('...')
def simple():
print('*' * 20)
print simple.__name__
#output:wrapper
爲什麼輸出是'包裝'而不是'裝飾者'或'日誌'?
也許不那麼相關的功能,但你應該看看[什麼'functools.wraps'做?](http://stackoverflow.com/questions/308999/what-does-functools-wraps-do) –
你知道裝飾者如何在內部工作嗎?重寫它沒有語法糖有助於理解這裏發生的事情。 –