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
,为什么?
は、
になることと同等です。now
がlog('rain:')(原来的now)
次に、__name__ がラッパーである理由を説明してください
https://docs.python.org/2.7/library/inspect.htmlによると
つまり、
に基づいています。__name__
は特定の定義別の例として
リーリー装飾された関数は実際には now 関数ではありません
代わりに、log("rain")(now)
は実際にはあなたが定義したラッパーです。
この問題に対して、__name__ などを正しく設定できる関数ツールのラップがあります
リーリー