請(qǐng)看下 無(wú)參數(shù)的裝飾器
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的新野網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
如下:
def test(func):
print("test")
def test_in():
print("testing")
return "test "+func()+" test"
return test_in
def test01(func):
print("test01")
def test_in():
print("testing_01")
return "test01 "+func()+" test01"
return test_in
@test
@test01
def f1():
print("---f1----")
return "hello_word"
print(f1())
請(qǐng)看有兩個(gè)參數(shù)的
def test(func):
print("test")
def test_in():
print("testing")
return "test "+func()+" test"
return test_in
@test
def f1(a,b):
print("---f1----")
return "hello_word"
print(f1(2,3)) # 傳入兩個(gè)參數(shù)
拋錯(cuò)如下:
File "D:/works/Unittest/test.py", line 14, in
print(f1(2,3))
TypeError: test_in() takes 0 positional arguments but 2 were given
理解下 為什么會(huì)拋錯(cuò)
@ test 意思就是 f1=test(f1) , f1 指向是 test_in 函數(shù)體
在執(zhí)行 f1(2,3) 的時(shí)候 要執(zhí)行 test_in 函數(shù)體, 但是test_in 沒(méi)有地方接受參數(shù), 所以要報(bào)錯(cuò)
下邊我們添加上 繼續(xù)執(zhí)行看看結(jié)果如何:
def test(func):
print("test")
def test_in(a,b):
print("testing")
return "test "+func()+" test"
return test_in
@test
def f1(a,b):
print("---f1----")
return "hello_word"
print(f1(2,3))
報(bào)錯(cuò)如下:
File "D:/works/Unittest/test.py", line 14, in
print(f1(2,3))
File "D:/works/Unittest/test.py", line 5, in test_in
return "test "+func()+" test"
TypeError: f1() missing 2 required positional arguments: 'a' and 'b'
解釋如下:無(wú)錫婦科醫(yī)院排名 http://www.csfk0731.com/
在執(zhí)行test_in 函數(shù)體的時(shí)候, 發(fā)現(xiàn)有個(gè) func(), 它的指向 就是 f1(a,b) , 它是需要兩個(gè)參數(shù)的, 但是找不到,就會(huì)報(bào)錯(cuò)
改下 再執(zhí)行就不會(huì)報(bào)錯(cuò)了
def test(func):
print("test")
def test_in(a,b):
print("testing")
return "test "+func(a,b)+" test"
return test_in
@test
def f1(a,b):
print("---f1----")
return "hello_word"
print(f1(2,3))
3. 可變參數(shù)
修改如下 就可以隨便傳遞參數(shù)。
def test(func):
print("test")
def test_in(*args,**kargs):
print("testing")
return "test "+str(func(*args,**kargs))+" test"
return test_in
@test
def f1(a,b):
print("---f1----")
return a+b
@test
def f2(a,b,c,d):
return(a+b+c+d)
print(f1(5,9))
print(f2(1,3,4,5))