人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python 裝飾器詳解與應(yīng)用范例

發(fā)布日期:2021-12-13 07:18 | 文章來源:站長(zhǎng)之家

什么是裝飾器

從字面意思上來看,裝飾器是用來裝飾其他東西的工具。在python中裝飾器分為函數(shù)裝飾器和類裝飾器。
簡(jiǎn)而言之,函數(shù)裝飾器是用來裝飾函數(shù)的裝飾器,其主要目的是增加目標(biāo)函數(shù)的功能,類裝飾器也就是裝飾類的裝飾器,增加類的功能。

函數(shù)裝飾器

裝飾器本質(zhì)是嵌套函數(shù)
下面是一個(gè)簡(jiǎn)單的裝飾器

# fun1為裝飾器名稱,function指的是被裝飾的函數(shù)
def fun1(function):
	def fun2():
		print("開始了!")
		function() # 執(zhí)行被裝飾的函數(shù)或者 或者 return function()
	return fun2

外面的fun1()需要傳入一個(gè)參數(shù),這個(gè)參數(shù)是用來傳入要被裝飾的函數(shù),里面的fun2()需要執(zhí)行function這個(gè)參數(shù)。
這是將函數(shù)當(dāng)成參數(shù)傳入另一個(gè)函數(shù)。

使用方法:
在需要裝飾的函數(shù)上添加@裝飾器名稱

@fun1
def fun3():
	print("aaa")
fun3()

可以等價(jià)成這樣:

def fun3():
	print("aaa")
fun = fun1(fun3)
fun()

輸出結(jié)果是一致的

執(zhí)行結(jié)果:

開始了!
aaa

如果傳入的函數(shù)需要參數(shù)可以這樣寫:

def fun1(function):
	def fun2(a):
		print("開始了!")
		function(a) 
	return fun2
@fun1
def fun3(a):
	print(a)
fun3("aaa")

輸出結(jié)果:

開始了!
aaa

如果不清楚傳入的函數(shù)需要多少個(gè)參數(shù),可以這樣寫:

def fun1(function):
	def fun2(*args, **kwargs):
		print("開始了!")
		function(*args, **kwargs) 
	return fun2
@fun1
def fun3(a,b):
	print(a,b)
@fun1	
def fun4(a,b,c):
 print(a,b,c)
 
fun3("aaa","bbb")
fun4("ccc","ddd","eee")

運(yùn)行結(jié)果:

開始了!
aaa bbb
開始了!
ccc ddd eee

如果函數(shù)裝飾器需要添加參數(shù),可以這樣寫:

def fun(msg):
	def fun1(function):
		def fun2(*args, **kwargs):
			print("開始了!{}".format(msg))
			function(*args, **kwargs) 
		return fun2
	return fun1
@fun(msg="小朋友")
def fun3(a,b):
	print(a,b)
fun3("aaa","bbb")

運(yùn)行結(jié)果:

開始了!小朋友
aaa bbb

類裝飾器

類裝飾器的用法基本和函數(shù)裝飾器一樣,只不過是用類寫的裝飾器

class fun1(object):
 def __init__(self, func):
  self.func = func
 def __call__(self, *args, **kwargs):
  print(("開始了!")
  self.func(*args, **kwargs)
@fun1
def fun2(a,b):
	print(a,b)
fun2("aaa","bbb")

類裝飾用到了類的__call__方法

運(yùn)行結(jié)果:

開始了!
aaa bbb

還可以這樣寫:

class fun(object):
 def __init__(self, msg):
  self.msg = msg
  
 def __call__(self, func):
  def fun1(*args, **kwargs):
print("開始了!{0}".format(self.msg))
func(*args, **kwargs)
  return fun1
@fun(msg="小朋友")
def fun2(a, b):
 print(a, b)
fun2("aaa,","bbb")

運(yùn)行結(jié)果:

開始了!小朋友
aaa, bbb

到此這篇關(guān)于python 裝飾器詳解與應(yīng)用范例的文章就介紹到這了,更多相關(guān)python 裝飾器內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部