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
,为什么?
bersamaan dengan
now
menjadilog('rain:')(原来的now)
Kemudian terangkan mengapa __name__ ialah pembungkus
Mengikut https://docs.python.org/2.7/library/inspect.html
Jadi
__name__
adalah berdasarkan definisi khususSebagai contoh lain
Fungsi berhias sebenarnya bukan fungsi sekarang
Sebaliknya, log("hujan")(sekarang)
sebenarnya adalah pembalut yang anda tentukan.
Untuk masalah ini, terdapat balut dalam functools yang boleh menetapkan __name__ dengan betul dan seumpamanya