黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

python 裝飾器 初步認(rèn)識

系統(tǒng) 1995 0
首先理解Python的函數(shù)能像普通的對象一樣能作為參數(shù)傳遞給其他函數(shù),可以被賦值給其他變量,可以作為返回值,可以被定義在另外一個函數(shù)內(nèi)。
前面的文章已經(jīng)對閉包做了介紹,再次進行延伸和理解一下裝飾器,主要用于不在改變源代碼的情況下進行添加功能,裝飾器利用閉包來實現(xiàn),一般和閉包一起使用。
裝飾器返回一個函數(shù)對象,簡單理解在原函數(shù)功能上又加入新功能并返回一個和原函數(shù)名相同的函數(shù)對象。
            
              def funcout(func):    
	def funcIn(x,y):       
 		func(x,y)#外部函數(shù)傳入的參數(shù)test函數(shù)在內(nèi)部函數(shù)的調(diào)用        
		 addf()#新增功能函數(shù)    
	 return funcIn
 #閉包 外部無法直接訪問內(nèi)部函數(shù)  將一個函數(shù)當(dāng)成參數(shù)傳遞進來 funcout(test)調(diào)用時返回一個函數(shù)對象 用一個變量接收函數(shù)對象的地址比如假設(shè)為ss
 #ss(1,2) 調(diào)用的內(nèi)部函數(shù)  func是傳進來的函數(shù)test 此時func調(diào)用傳入的函數(shù)  test需要兩個參數(shù) 需要在內(nèi)部函數(shù)中傳參
def addf():    
	print("新增功能")
def test(a,b):    
	print("a=%s,b=%s"%(a,b))
ff =funcout(test)
ff(1,2)#調(diào)用函數(shù) 


            
          
            
              在上面代碼將函數(shù)test 進行替換成下列調(diào)用方式 就是加了一個@符號 實現(xiàn)裝飾器寫法更簡單
@funcout # 裝飾器 相當(dāng)于 test=func(test)
def test(a,b):    
	print("a=%s,b=%s"%(a,b))
test(1,2)#調(diào)用函數(shù)test 為裝飾器的函數(shù) 增加新的功能之后的test

            
          
通用裝飾器函數(shù) 對可變參數(shù)的處理
            
              def funcout(func):   
 	def funcIn(*args,**kwargs)        
		 func(*args,**kwargs) #沒有返回值時使用       
		 addf()       
        	return funcIn(*args,**kwargs)       #內(nèi)部函數(shù)的返回值 防止傳入的函數(shù)有返回值  有返回值時使用     	
	return funcIn  

            
          
            
              還可以定義多個裝飾器 執(zhí)行順序是從里到外的。
@a
@b
@c
def f ():
等效于  f = a(b(c(f)))

            
          
            
            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論