Python進階-多重嵌套和閉包

這個概念真的有點難,我思考了兩天才開始寫這篇教程豫领,這和java 真的有點不太一樣氧卧,沒事,咱一步一步來氏堤,一點點分解沙绝。

以下內(nèi)容僅作者理解,并不權威鼠锈,如果有不恰當?shù)牡胤缴撩剩埣夹g大牛指點。

在python中 函數(shù)屬于‘一等公民’购笆,可以相互嵌套粗悯。

看一個例子:

注意:定義內(nèi)函數(shù)后,要返回內(nèi)函數(shù)的引用 即 return inner

這個例子很淺顯易懂同欠,只是函數(shù)進行了嵌套

接下來看一個稍微復雜一點的例子

這里就存在一個閉包的概念样傍,我們先看一下:

閉包:在一個外函數(shù)中定義了一個內(nèi)函數(shù),內(nèi)函數(shù)里運用了外函數(shù)的臨時變量铺遂,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用衫哥。這樣就構成了一個閉包。

#在一個外函數(shù)(outer)中定義了一個內(nèi)函數(shù)(inner)襟锐,內(nèi)函數(shù)里運用了外函數(shù)的臨時變量(x,y=10)撤逢,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用(return inner())。這樣就構成了一個閉包。

這里特殊說明一下蚊荣,按照我們通常的經(jīng)驗初狰,一個函數(shù)被調(diào)用的時候,會在內(nèi)存空間分配一部分空間互例,來存儲在和函數(shù)內(nèi)部的變量等奢入,當這個函數(shù)調(diào)用完成之后,這一部分空間會被釋放媳叨。但是閉包有一點點不同俊马,當外層函數(shù)執(zhí)行完后,內(nèi)層函數(shù)沒有肩杈,它的引用依然被持有柴我,所以外層函數(shù)的局部變量不能被釋放,這個局部變量就被綁定在內(nèi)層函數(shù)上了扩然,然后外層函數(shù)再被釋放艘儒。

鞏固一下這個解釋

這里有一個錯誤 return inner 不能加()差別小伙伴們自己想清楚哦


20190531補充

這個東西還是要講一下,不然講下一個話題夫偶,不太好開展

關于inner() 和inner

inner 其實通俗的理解他就是一個函數(shù)的名字界睁,這個名字指向一個函數(shù),當后面沒有小括號的時候兵拢,它可以被傳遞翻斟,被賦值,但是不會去執(zhí)行说铃。

inner()加上()访惜,就是告訴程序,通過inner 名字找到這個函數(shù)腻扇,然后執(zhí)行這個函數(shù)


通俗的講债热,如何能形成閉包?

1.存在函數(shù)的嵌套2.內(nèi)層函數(shù)要引用外層函數(shù)的變量3外層函數(shù)要返回內(nèi)層函數(shù)的引用

為什么要使用閉包幼苛?

舉個例子窒篱,這個例子是從別人那里偷來的

定義直線 y = a*x+b? 如何使用閉包 創(chuàng)建一個函數(shù)可以生成對于任意a,b的直線呢舶沿?


這樣可以對于任意a,b,如果要取到任意ab 寫函數(shù) 墙杯,那要寫無數(shù)個方法了

在上述代碼中,內(nèi)部函數(shù)line() 中其實沒有臨時參數(shù)a,b.在python 中如果在自己的作用于里沒有找到相應的參數(shù)括荡,即像上一級控件中去尋找高镐,在外部函數(shù)line_fun 中找到使用

如果我們想處理 過坐標(0,1)這一點的所有直線 顯然是y = a*x +1 這樣一條直線,如果想像剛才一樣來一個方法 大家感受一下

這里看 我們并沒有成功的改變b?

之所以沒有改變b,就是剛才所說的作用域的問題一汽,內(nèi)部函數(shù)在內(nèi)部沒有找到參數(shù)b,去外層函數(shù)尋找 尋找后使用外層函數(shù)的b = 1避消;可以打印一下兩個b的地址發(fā)現(xiàn)兩個b 根本不是同一個b

兩個b 參數(shù)之間的關系

為什么?(這也是為什么叫閉包)

閉包作為對象被返回時召夹,它的引用變量就已經(jīng)確定(已經(jīng)保存在它的__closure__屬性中)岩喷,不會再被修改。是的监憎,閉包在被返回時纱意,它的所有變量就已經(jīng)固定,形成了一個封閉的對象鲸阔,這個對象包含了其引用的所有外部偷霉、內(nèi)部變量和表達式。閉包的參數(shù)例外褐筛。

print(line_fun(10).__closure__)

# (< cell at 0x10a07cb58: int object at 0x109e366c0 >, < cell at 0x10a07cb88: int object at 0x109e365a0 >)

# __closure__屬性返回的是一個元組對象类少,包含了閉包引用的外部變量。

閉包的實際應用渔扎?

暫時還木有用到 用到后過來添加

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硫狞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晃痴,更是在濱河造成了極大的恐慌残吩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倘核,死亡現(xiàn)場離奇詭異泣侮,居然都是意外死亡,警方通過查閱死者的電腦和手機紧唱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門活尊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漏益,你說我怎么就攤上這事酬凳。” “怎么了遭庶?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵宁仔,是天一觀的道長。 經(jīng)常有香客問我峦睡,道長翎苫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任榨了,我火速辦了婚禮煎谍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘龙屉。我一直安慰自己呐粘,他們只是感情好满俗,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著作岖,像睡著了一般唆垃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痘儡,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天辕万,我揣著相機與錄音,去河邊找鬼沉删。 笑死渐尿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的矾瑰。 我是一名探鬼主播砖茸,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殴穴!你這毒婦竟也來了渔彰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤推正,失蹤者是張志新(化名)和其女友劉穎恍涂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體植榕,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡再沧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尊残。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炒瘸。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寝衫,靈堂內(nèi)的尸體忽然破棺而出顷扩,到底是詐尸還是另有隱情,我是刑警寧澤慰毅,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布隘截,位于F島的核電站,受9級特大地震影響汹胃,放射性物質(zhì)發(fā)生泄漏婶芭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一着饥、第九天 我趴在偏房一處隱蔽的房頂上張望犀农。 院中可真熱鬧,春花似錦宰掉、人聲如沸呵哨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孟害。三九已至拒炎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纹坐,已是汗流浹背枝冀。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工舞丛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耘子,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓球切,卻偏偏與公主長得像谷誓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吨凑,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 以下翻譯自Apple官方文檔捍歪,結(jié)合自己的理解記錄下來。翻譯基于 swift 3.0.1 原文地址 Closure...
    藝術農(nóng)閱讀 1,514評論 0 3
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔鸵钝,今天18年5月份再次想寫文章糙臼,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,732評論 2 9
  • 來源于 現(xiàn)代JavaScript教程閉包章節(jié)中文翻譯計劃本文很清晰地解釋了閉包是什么,以及閉包如何產(chǎn)生恩商,相信你看完...
    71f241c96a34閱讀 572評論 0 1
  • 剛來報到的時候变逃,接待我的師姐帶我來找宿舍,當時九月份的廣州怠堪,下午三四點揽乱,晴空萬里,溫度突破30度粟矿。而當我知道我住在...
    KE大叔閱讀 504評論 0 1
  • 我接觸過很多人凰棉,雖然不都是面對面的,但與他們產(chǎn)生交集陌粹,對我來說就是一種幸運撒犀。 2017.11.19 星期日 陰 最...
    離歧閱讀 623評論 5 6