溫馨提示×

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

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

Python之閉包裝飾器

發(fā)布時(shí)間:2020-07-15 04:15:17 來(lái)源:網(wǎng)絡(luò) 閱讀:591 作者:我是小谷粒 欄目:編程語(yǔ)言

1.什么是閉包?
多層函數(shù)嵌套,(函數(shù)里面還有定義函數(shù),一般是兩個(gè)),往往內(nèi)層函數(shù)會(huì)用到外層函數(shù)的變量,把內(nèi)層函數(shù)以及外部函數(shù)的變量當(dāng)成一個(gè)特殊的對(duì)象,這就是閉包。閉包比面向?qū)ο蟾儍?、更輕量,既有數(shù)據(jù)又有執(zhí)行數(shù)據(jù)的代碼;比普通函數(shù)功能更強(qiáng)大,不僅有代碼還有數(shù)據(jù);
2.匿名函數(shù)、普通函數(shù)、閉包、面向?qū)ο蟮膮^(qū)別?
1). 匿名函數(shù)能夠完成基本的簡(jiǎn)單功能,傳遞是這個(gè)函數(shù)的引用 只有功能。
2). 普通函數(shù)能夠完成較為復(fù)雜的功能,傳遞是這個(gè)函數(shù)的引用 只有功能。
3). 閉包能夠?qū)⑤^為復(fù)雜的功能,傳遞是這個(gè)閉包中的函數(shù)以及數(shù)據(jù)。
4). 對(duì)象能夠完成最為復(fù)雜的功能,傳遞是數(shù)據(jù)+功能,但占用大量空間,浪費(fèi)資源。
3.什么是裝飾器?
利用閉包的基本原理,對(duì)一個(gè)目標(biāo)函數(shù)進(jìn)行裝飾,即在執(zhí)行一個(gè)目標(biāo)函數(shù)之前、之后執(zhí)行一些特定的事情。
通用的裝飾器示例如下:
def set_func(func):
print("---開(kāi)始進(jìn)行裝飾")
def call_func(*args, kwargs):
print("---這是目標(biāo)函數(shù)之前做的事情----") # 如果需要的話
ret = func(*args, * kwargs) # 拆包
print("---這是目標(biāo)函數(shù)之后做的事情----") # 如果需要的話
return ret # 如果需要有返回值的話可以加上返回值
return call_func
@set_func # 相當(dāng)于 test1 = set_func(test1)
def test1(
args,
kwargs):
"""函數(shù)內(nèi)部要做的功能"""
return "ok" # 如果需要的話,否則就返回None

向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