溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python高級(jí)進(jìn)階之 無(wú)參數(shù),有參數(shù), 可變參數(shù)的裝飾器的應(yīng)用

發(fā)布時(shí)間:2020-07-05 20:48:31 來(lái)源:網(wǎng)絡(luò) 閱讀:334 作者:nineteens 欄目:編程語(yǔ)言

  請(qǐng)看下 無(wú)參數(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))


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI