上一篇:由淺入深,走進(jìn)Python裝飾器-----第一篇:基礎(chǔ)
成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開(kāi)發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、做網(wǎng)站,重慶APP軟件開(kāi)發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。成都創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!# 第一種
@函數(shù)
被裝飾函數(shù)
# 第二種
@函數(shù)
被裝飾類(lèi)
# 第三種
@類(lèi)
被裝飾類(lèi)
# 第四種
@函數(shù)
被裝飾函數(shù)
@函數(shù)
被裝飾函數(shù)
# 默認(rèn)將old函數(shù)的參數(shù)傳給outer里面的第一層函數(shù)
def outer(f):
def inner(var):
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :",f)
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) :",var)
f(var)
print("3 我是outer函數(shù),我在old函數(shù)后顯示")
return inner
def inner2(var):
pass
@outer #old = outer(old)
def old(var):
print("2 我是old函數(shù)","參數(shù): ",var)
var = '音樂(lè)'
old(var)
>>>1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :
>>>1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 音樂(lè)
>>>2 我是old函數(shù), 參數(shù):音樂(lè)
>>>3 我是outer函數(shù),我在old函數(shù)后顯示
def outer(f):
def inner(a, b,*args,d,**kwargs):
tmp = d #通過(guò)變量接收命名關(guān)鍵字參數(shù)傳進(jìn)來(lái)的參數(shù),然后再傳遞給內(nèi)部調(diào)用的函數(shù)
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :",f)
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) :\
普通參數(shù)a={}, 默認(rèn)參數(shù)b={}, 多余的普通參數(shù):{}和{}".format(a,b,args[0],args[1]))
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) :\
命令關(guān)鍵字參數(shù)d:{}, 多余的關(guān)鍵字參數(shù):{}和{}".format(d,kwargs["key1"],kwargs["key2"]))
f(a,b, *args,d = tmp,**kwargs)
print("3 我是outer函數(shù),我在old函數(shù)后顯示")
return inner
@outer #old = outer(old)
def old(a, b=2, *args,d,**kwargs): #五種參數(shù)
print("2 我是old函數(shù)",
"普通參數(shù)a={0}, 默認(rèn)參數(shù)b={1}, 多余的普通參數(shù):{2}和{3},\
命令關(guān)鍵字參數(shù)d:{4}, 多余的關(guān)鍵字參數(shù):{5}和{6}"\
.format(a,b,args[0],args[1],d,kwargs["key1"],kwargs["key2"]))
dict1 = {"key1":"value1","key2":"value2"}
old(1,22,'args1','args2',d=4,**dict1)
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 普通參數(shù)a=1, 默認(rèn)參數(shù)b=22, 多余的普通參數(shù):args1和args2
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 命名關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 2 我是old函數(shù) 普通參數(shù)a=1, 默認(rèn)參數(shù)b=22, 多余的普通參數(shù):args1和args2,命名關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 3 我是outer函數(shù),我在old函數(shù)后顯示
def outer(f):
def inner(a, b,*args,d,**kwargs):
tmp = d #通過(guò)變量接收命名關(guān)鍵字參數(shù)傳進(jìn)來(lái)的參數(shù),然后再傳遞給內(nèi)部調(diào)用的函數(shù)
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :",f)
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) :\
普通參數(shù)a={}, 默認(rèn)參數(shù)b={}, 多余的普通參數(shù):{}和{}".format(a,b,args[0],args[1]))
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) :\
命令關(guān)鍵字參數(shù)d:{}, 多余的關(guān)鍵字參數(shù):{}和{}".format(d,kwargs["key1"],kwargs["key2"]))
f(a,b, *args,d = tmp,**kwargs)
print("3 我是outer函數(shù),我在old函數(shù)后顯示")
return inner
@outer #old = outer(outer(old))
@outer #old = outer(old)
def old(a, b=2, *args,d,**kwargs): #五種參數(shù)
print("2 我是old函數(shù)",
"普通參數(shù)a={0}, 默認(rèn)參數(shù)b={1}, 多余的普通參數(shù):{2}和{3},\
命令關(guān)鍵字參數(shù)d:{4}, 多余的關(guān)鍵字參數(shù):{5}和{6}"\
.format(a,b,args[0],args[1],d,kwargs["key1"],kwargs["key2"]))
dict1 = {"key1":"value1","key2":"value2"}
old(1,22,'args1','args2',d=4,**dict1)
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old : .inner at 0x00000000024FAAE8>
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 普通參數(shù)a=1, 默認(rèn)參數(shù)b=22, 多余的普通參數(shù):args1和args2
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 命令關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 普通參數(shù)a=1, 默認(rèn)參數(shù)b=22, 多余的普通參數(shù):args1和args2
>>> 1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 命令關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 2 我是old函數(shù) 普通參數(shù)a=1, 默認(rèn)參數(shù)b=22, 多余的普通參數(shù):args1和args2,命令關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 3 我是outer函數(shù),我在old函數(shù)后顯示
>>> 3 我是outer函數(shù),我在old函數(shù)后顯示
def kuozhan(can_shu):
def outer(f):
tmp = can_shu
def inner1():
print("1 我是outer函數(shù)里的inner1,接收外部傳進(jìn)來(lái)的old :",f)
f()
print("3 我是outer函數(shù)里的inner1,我在old函數(shù)后顯示")
def inner2():
print("1 我是outer函數(shù)里的inner2,接收外部傳進(jìn)來(lái)的old :",f)
f()
print("3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示")
if tmp == 1:
return inner1
else:
return inner2
@kuozhan(2) # old = kuozhan(2)(old) ==> old = outer(old)
def old():
print("2 我是old函數(shù)")
old()
>>> 1 我是outer函數(shù)里的inner2,接收外部傳進(jìn)來(lái)的old :
>>> 2 我是old函數(shù)
>>> 3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示
def kuozhan(can_shu):
def outer(f):
tmp = can_shu
def inner1(var):
print("1 我是outer函數(shù)里的inner1,接收外部傳進(jìn)來(lái)的old :",f)
print("1 我是outer函數(shù)里的inner1,接收外部傳進(jìn)來(lái)的old的參數(shù) :",var)
f(var)
print("3 我是outer函數(shù)里的inner1,我在old函數(shù)后顯示")
def inner2(var):
print("1 我是outer函數(shù)里的inner2,接收外部傳進(jìn)來(lái)的old :",f)
print("1 我是outer函數(shù)里的inner2,接收外部傳進(jìn)來(lái)的old的參數(shù) :",var)
f(var)
print("3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示")
if tmp == 1:
return inner1
else:
return inner2
return outer
@kuozhan(2) # old = kuozhan(2)(old) ==> old = outer(old)
def old(var):
print("2 我是old函數(shù),","我的參數(shù)是: ",var)
var = "音樂(lè)"
old(var)
>>> 1 我是outer函數(shù)里的inner2,接收外部傳進(jìn)來(lái)的old :
>>> 1 我是outer函數(shù)里的inner2,接收外部傳進(jìn)來(lái)的old的參數(shù) : 音樂(lè)
>>> 2 我是old函數(shù), 我的參數(shù)是: 音樂(lè)
>>> 3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示
# 默認(rèn)將old函數(shù)的參數(shù)傳給outer里面的第一層函數(shù)
def outer(f):
def inner(var):
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :",f)
print("1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) :",var)
f(var)
print("3 我是outer函數(shù),我在old函數(shù)后顯示")
return inner
def inner2(var):
pass
class MyClass():
@outer #old = outer(old)
def old(var):
print("2 我是old函數(shù)","參數(shù): ",var)
var = '音樂(lè)'
MyClass.old(var)
>>>1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old :
>>>1 我是outer函數(shù),接收外部傳進(jìn)來(lái)的old的參數(shù) : 音樂(lè)
>>>2 我是old函數(shù), 參數(shù):音樂(lè)
>>>3 我是outer函數(shù),我在old函數(shù)后顯示
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。