裝飾器是什么:
裝飾器的通用:
帶參數(shù)的裝飾器的使用:
裝飾器的使用范圍:
入門之前迂尝,先提幾個問題丈钙,然后依次回答這些問題。
答:
裝飾器本質(zhì)上是一個 Python 函數(shù)或類孝情,它可以讓其他函數(shù)或類在不需要做任何代碼修改的前提下增加額外功能鱼蝉,
裝飾器的返回值也是一個函數(shù)/類對象洒嗤。
它經(jīng)常用于有切面需求的場景箫荡,比如:插入日志、性能測試渔隶、事務(wù)處理羔挡、緩存、權(quán)限校驗(yàn)等場景间唉,裝飾器是解決這類問題的絕佳設(shè)計(jì)绞灼。
有了裝飾器,我們就可以抽離出大量與函數(shù)功能本身無關(guān)的雷同代碼到裝飾器中并繼續(xù)重用呈野。
概括的講低矮,裝飾器的作用就是為已經(jīng)存在的對象添加額外的功能,從而使代碼符合開放封閉原則被冒。
裝飾器有兩種類型军掂,一種裝飾器帶參數(shù)的轮蜕,一種裝飾器不帶參數(shù)的。
裝飾器帶的應(yīng)用場景:
裝飾器主要可以用在緩存蝗锥、日志跃洛、URL路由和權(quán)限校驗(yàn)等常見的功能
python中裝飾器的應(yīng)用場景使用demo
# _*_ coding:utf-8 _*_
# intend:簡單裝飾器的功能
# time:2017年11月28日10:20:28
# author:lucktime
## 通用裝飾器
def PrintData(func):
def inner(*argvs,**kwargcs):
print('printData ')
x = func(*argvs,**kwargcs)
return x
return inner
## 帶參數(shù)的裝飾器
def Argv_Fun(argv):
def PrintData(func):
def inner(*argvs,**kwargcs):
print('printData Argv_Fun')
print(argv)
x = func(*argvs,**kwargcs)
return x
return inner
return PrintData
'''
test()
打印結(jié)果:
printData
printData Argv_Fun
hello Jack
==============print test
'''
@PrintData
@Argv_Fun('hello Jack')
def test():
print('==============print test')
'''
test1(3)
打印結(jié)果:
printData Argv_Fun
hello Jack
printData
==============print test1 value 3
'''
@Argv_Fun('hello Jack')
@PrintData
def test1(a):
print('==============print test1 value %d'%a)
'''
print(test2())
打印結(jié)果:
printData
printData Argv_Fun
hello Jack
==============print test2
test2
'''
@PrintData
@Argv_Fun('hello Jack')
def test2():
print('==============print test2')
return "test2"
'''
print(test4(2,5))
printData
printData Argv_Fun
hello Jack
==============print test4 2 + 5 = 7
7
'''
@PrintData
@Argv_Fun('hello Jack')
def test4(a,b):
print('==============print test4 %d + %d = %d'%(a,b,(a+b)))
return a+b
test()
test1(3)
print(test2())
print(test4(2,5))