裝飾器本質(zhì)上是一個Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數(shù)對象。它經(jīng)常用于有切面需求的場景,比如:插入日志、性能測試、事務(wù)處理、緩存、權(quán)限校驗等場景。裝飾器是解決這類問題的絕佳設(shè)計,有了裝飾器,我們就可以抽離出大量與函數(shù)功能本身無關(guān)的雷同代碼并繼續(xù)重用。
概括的講,裝飾器的作用就是為已經(jīng)存在的函數(shù)或?qū)ο筇砑宇~外的功能
裝飾器的使用:
#!/usr/bin/env python
#encoding=utf8
#參數(shù)不確定的時候使用*args,**kwargs
def deco(f):
? ? def pack(*args,**kwargs):
? ? ? ? print 'go to virify if you are valid user!'
? ? ? ? f(*args,**kwargs)
? ? ? ? print 'i am finish ...... welcome'
? ? return pack
@deco
def say(name):
? ? print 'hello,i am %s ----------' % name
@deco
def sayinfo(name,age):
? ? print 'hello,i am %s,i am %s years old' % (name,age)
say('wangzhen')
sayinfo('wz','20')
inspect模塊獲取函數(shù)名稱的方法:
def debug():
? ? import inspect
? ? call=inspect.stack()
? ? print call
? ? caller_name=inspect.stack()[1][3]
? ? print caller_name
? ? print "[DEBUG]:enter {}()".format(caller_name)
def say():
? ? debug()
? ? print 'hello'
if __name__=='__main__':
? ? say()

裝飾器帶參數(shù)的函數(shù):
