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