最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

0719-閉包,裝飾器

2023-07-19 22:34 作者:GHWNM  | 我要投稿

閉包,裝飾器

現(xiàn)在有一條線 給你x的值,求y,公式是y = k*x+b,k和b為每一條線

這個(gè)問(wèn)題有很多種方法解,定義函數(shù)啊,類啊等等

__call__方法,編碼調(diào)用 對(duì)象() 時(shí)自動(dòng)執(zhí)行call方法,雖然用類能解決

但是每個(gè)線都要一個(gè)專門的對(duì)象,占用空間

于是本次的主題-->閉包,就是函數(shù)里定義一個(gè)函數(shù),一個(gè)函數(shù)套另外一個(gè)函數(shù),而且你要用的是內(nèi)部那個(gè)函數(shù)

(而且一般內(nèi)部函數(shù)是要用到外部函數(shù)的變量,以及這個(gè)比專門創(chuàng)對(duì)象的空間占用少很多,但是只能做一些小的功能)

def func01(k,b):

def func01_1(x):

print(k*x+b)

return func01_1


line_6_1 = func01(1,2) 1

line_6_1(0) 2

line_6_1(1) 3

line_6_1(2) 4

就像這樣,跟類很像對(duì)吧

具體怎么執(zhí)行的呢?

因?yàn)槌绦蚩吹絛ef定義函數(shù)的時(shí)候會(huì)跳過(guò),所以我在第一行調(diào)用的時(shí)候會(huì)進(jìn)func01里,然后看到def func01_1會(huì)跳過(guò)

然后看到return func01_1,實(shí)際上這個(gè)時(shí)候func01_1代表的是指向func01_1的一個(gè)變量名

然后line_6_1把這個(gè)存儲(chǔ)起來(lái),也就是指向了fun01_1這個(gè)函數(shù),然后在下面調(diào)用line_6_1的時(shí)候相當(dāng)于調(diào)用func01_1

很巧妙的方法,最開始看會(huì)有點(diǎn)蒙,這個(gè)東西巧在哪,他就是只用了函數(shù)的基礎(chǔ)特性,舉個(gè)笑話,給你說(shuō)了函數(shù),然后讓你自己摸索出來(lái)閉包(

好了,你已經(jīng)學(xué)會(huì)基礎(chǔ)語(yǔ)法和函數(shù)了,快去寫個(gè)裝飾器把

咳咳,然后我們就要開始學(xué)裝飾器了,閉包就是函數(shù)的高級(jí)用法和裝飾器的前置


裝飾器

這個(gè)東西是程序開發(fā)中比較基礎(chǔ)的內(nèi)容,對(duì)于自學(xué)者來(lái)說(shuō)比較繞,一般自學(xué)就繞過(guò)去了,但是面試,開發(fā)中都會(huì)用的

比較重要,一定要認(rèn)真學(xué)

舉個(gè)例子,一個(gè)公司有好多個(gè)部門,其中有這樣幾個(gè)部門:

基礎(chǔ)平臺(tái)/接口開發(fā)部 調(diào)用部A 調(diào)用部B

現(xiàn)在你老板讓你加個(gè)權(quán)限認(rèn)證,讓調(diào)用的時(shí)候只有一部分人能用,你怎么弄

裝飾器就是不給A,B說(shuō)讓他們自己做,也不用修改基礎(chǔ)的平臺(tái)/接口(已經(jīng)寫好的函數(shù),功能)

自己再另外寫個(gè)閉包函數(shù),之前咱們寫的閉包內(nèi)函數(shù)是直接返回個(gè)公式對(duì)吧,現(xiàn)在把他返回外函數(shù)接收的東西,但是返回之前加上你要做的功能

然后外部在儲(chǔ)存的時(shí)候不用一個(gè)新的變量,用本來(lái)的函數(shù)名,也就是說(shuō)這個(gè)函數(shù)名現(xiàn)在指向的是你的裝飾器內(nèi)部的功能,先執(zhí)行你的功能,在執(zhí)行原本的功能

這樣就實(shí)現(xiàn)了在不修改原本代碼的情況下,擴(kuò)展新功能(加個(gè)權(quán)限認(rèn)證啊之類的),遵循了開閉原則

但是這個(gè)東西不能在函數(shù)里面做東西,要么在整體之前,要么在整體之后擴(kuò)展功能

這個(gè)東西相當(dāng)于,把原來(lái)函數(shù)名的指向改成了內(nèi)函數(shù),里面的參數(shù)是原本函數(shù)名指向的函數(shù),而原來(lái)的函數(shù)也沒(méi)有被銷毀,是在內(nèi)函數(shù)里掛著他的

所以這個(gè)裝飾器跟面向?qū)ο蟮念惡芟?,都是一種模板,所以每次在寫@的時(shí)候就開始裝包閉包了,也就是外函數(shù)和內(nèi)函數(shù)中間的語(yǔ)句會(huì)開始執(zhí)行了

不定長(zhǎng)參數(shù)也簡(jiǎn)單,內(nèi)函數(shù)里加個(gè)*args,傳進(jìn)去的時(shí)候也*args拆包,關(guān)鍵字不定長(zhǎng)就一樣的,只不過(guò)倆都多加個(gè)*

要返回參數(shù)的話就直接return就行了,沒(méi)返回值的你調(diào)return自然就沒(méi)有,(如果功能函數(shù)返回的是200,OK是啥啊,元組嘛)

好了,這些就是一個(gè)裝飾器的使用過(guò)程了,沒(méi)錯(cuò),還有多個(gè)裝飾器對(duì)同一個(gè)函數(shù)進(jìn)行裝飾(


多個(gè)裝飾器裝飾同一個(gè)函數(shù)

這個(gè)實(shí)際上不難,就是邏輯上要弄通

@裝飾器1

@裝飾器2

def 函數(shù)():

pass

這個(gè)代碼在執(zhí)行的時(shí)候,是先啟用裝飾器2,再啟用裝飾器1,但是執(zhí)行裝飾代碼的時(shí)候還是正著來(lái),先1后2

因?yàn)樗贎裝飾的時(shí)候發(fā)現(xiàn)下一行代碼不是目標(biāo),就先等他執(zhí)行完變成可裝飾對(duì)象才會(huì)再開始裝飾

所以就會(huì)先讓裝飾器2開始裝飾,但是執(zhí)行的時(shí)候就相當(dāng)于幾個(gè)def函數(shù)嵌套,還是根據(jù)裝飾的先后來(lái)的

反正如果要記的話就是裝飾過(guò)程倒著來(lái),執(zhí)行的時(shí)候還是正著的


0719-閉包,裝飾器的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
称多县| 高邑县| 海盐县| 渑池县| 历史| 宁津县| 南木林县| 卫辉市| 宣城市| 普兰县| 大姚县| 綦江县| 正宁县| 清水河县| 高州市| 西畴县| 高台县| 镇远县| 湛江市| 阳朔县| 藁城市| 思茅市| 金坛市| 黄山市| 阳城县| 德惠市| 木里| 应城市| 南靖县| 承德市| 黄山市| 平乐县| 女性| 偃师市| 元谋县| 客服| 宝应县| 耿马| 武隆县| 临城县| 新化县|