摘要:中的閉包的概念,在我看來,就相當(dāng)于在某個(gè)函數(shù)中又定義了一個(gè)或多個(gè)函數(shù),內(nèi)層函數(shù)定義了具體的實(shí)現(xiàn)方式,而外層返回的就是這個(gè)實(shí)現(xiàn)方式,但并沒有執(zhí)行,除非外層函數(shù)調(diào)用的內(nèi)層的實(shí)現(xiàn)方法被執(zhí)行了。
Python中的閉包的概念, 在我看來, 就相當(dāng)于在某個(gè)函數(shù)中又定義了一個(gè)或多個(gè)函數(shù), 內(nèi)層函數(shù)定義了具體的實(shí)現(xiàn)方式, 而外層返回的就是這個(gè)實(shí)現(xiàn)方式, 但并沒有執(zhí)行, 除非外層函數(shù)調(diào)用的內(nèi)層的實(shí)現(xiàn)方法被執(zhí)行了。至于這個(gè)怎么執(zhí)行, 看下面的例子就知道了
比如:
def sum_outer(x, y): def sum_in(z): return x + y - z; return sum_in #注意, 這里返回的不是sum_in() 只是sum_in的函數(shù)名 m = sum_outer(3, 4) #3, 4 分別對應(yīng)x, y,這里的m返回的也只是函數(shù)sum_in的定義,print m(5) # m對應(yīng)z, 這個(gè)時(shí)候才是真正sum_in執(zhí)行的時(shí)候
看起來就像通過sum_outer 調(diào)用了內(nèi)層的sum_in函數(shù), 多了層代理
其中一種應(yīng)用場景就是可以根據(jù)不同的參數(shù),使用相同的實(shí)現(xiàn)去返回對應(yīng)不同的結(jié)果,比如, 根據(jù)不同的配置獲取不同的數(shù)據(jù)庫連接, 或者要求在驗(yàn)證字符串長度時(shí), 可以根據(jù)不同的最大長度驗(yàn)證(外層傳遞最大長度, 內(nèi)層傳遞驗(yàn)證的字符串)。
在抽象化一點(diǎn), 外層定義了一個(gè)環(huán)境, 內(nèi)層則是在該環(huán)境中的要做的事情, 但這個(gè)事情還沒做,
只是要做。當(dāng)真正需要做的時(shí)候到這個(gè)環(huán)境中去做了就好了(外層的返回結(jié)果(m)執(zhí)行內(nèi)層的函數(shù)sum_in)
實(shí)際上, 直接給函數(shù)傳遞需要的所有參數(shù), 直接返回結(jié)果, 如上面的sum_outer和sum_in, 直接通過
def sum(x,y,z): return x + y - z
不就結(jié)了嗎,為社么還要閉包這個(gè)實(shí)現(xiàn)呢? 到目前來說, 只能看出他們是兩種不同的實(shí)現(xiàn)方式, 更多的區(qū)別, 還有待日后的學(xué)習(xí)體驗(yàn)
更新: 閉包最常見的應(yīng)用就是裝飾器。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37556.html
摘要:閉包可以用來在一個(gè)函數(shù)與一組私有變量之間創(chuàng)建關(guān)聯(lián)關(guān)系。夾帶私貨外部變量返回的是函數(shù),帶私貨的函數(shù)支持將函數(shù)當(dāng)成對象使用的編程語言,一般都支持閉包。所以說當(dāng)你的裝飾器需要自定義參數(shù)時(shí),一般都會形成閉包。 Python中的閉包不是一個(gè)一說就能明白的概念,但是隨著你往學(xué)習(xí)的深入,無論如何你都需要去了解這么一個(gè)東西。 閉包的概念 我們嘗試從概念上去理解一下閉包。 在一些語言中,在函數(shù)中可以(嵌...
摘要:項(xiàng)目地址閉包在計(jì)算機(jī)科學(xué)中,閉包英語,又稱詞法閉包或函數(shù)閉包,是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。 項(xiàng)目地址:https://git.io/pytips 閉包(Closure) 在計(jì)算機(jī)科學(xué)中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數(shù)閉包(function closures),是...
摘要:作用域閉包裝飾器話聊上篇聽講一切都是對象,是嗎是的,像函數(shù)也是對象。不錯(cuò)嘛這都被你看出來了,那你知道作用域的原則嗎我知道是知道可以我就是對那個(gè)作用域不是很理解。如果內(nèi)部函數(shù)引用到外層函數(shù)作用域的對象,這個(gè)內(nèi)部函數(shù)就稱為閉包。 Python Enclosing作用域、閉包、裝飾器話聊上篇 Jaglawz: 聽講Python一切都是對象,是嗎? Pylego: 是的,像函數(shù)也是對象。 Ja...
摘要:變量查找規(guī)則在中一個(gè)變量的查找順序是局部環(huán)境,閉包,全局,內(nèi)建閉包引用了自由變量的函數(shù)。閉包的作用閉包的最大特點(diǎn)是可以將父函數(shù)的變量與內(nèi)部函數(shù)綁定,并返回綁定變量后的函數(shù),此時(shí)即便生成閉包的環(huán)境父函數(shù)已經(jīng)釋放,閉包仍然存在。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之函數(shù)篇的重點(diǎn)知識及個(gè)人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、掌握裝飾器的本質(zhì)、功...
閱讀 3301·2023-04-25 14:35
閱讀 3423·2021-11-15 18:00
閱讀 2572·2021-11-12 10:34
閱讀 2502·2021-11-11 16:54
閱讀 3485·2021-10-08 10:12
閱讀 2770·2021-09-06 15:02
閱讀 3327·2021-09-04 16:48
閱讀 2806·2019-08-29 14:02