本篇內(nèi)容主要講解“Python閉包的概念、形式與應(yīng)用方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python閉包的概念、形式與應(yīng)用方式”吧!

10余年的巴里坤哈薩克網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整巴里坤哈薩克建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“巴里坤哈薩克網(wǎng)站設(shè)計(jì)”,“巴里坤哈薩克網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
閉包(Closure)是詞法閉包(Lexical Closure)的簡稱。對閉包的具體定義有很多種說法,這些說法大體可以分為兩類:
◆一種說法認(rèn)為閉包是符合一定條件的函數(shù),比如參考資源中這樣定義閉包:閉包是在其詞法上下文中引用了自由變量的函數(shù)。
◆另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。比如參考資源中就有這樣的的定義:在實(shí)現(xiàn)深約束時(shí),需要?jiǎng)?chuàng)建一個(gè)能顯式表示引用環(huán)境的東西,并將它與相關(guān)的子程序捆綁在一起,這樣捆綁起來的整體被稱為閉包。
這兩種定義在某種意義上是對立的,一個(gè)認(rèn)為閉包是函數(shù),另一個(gè)認(rèn)為閉包是函數(shù)和引用環(huán)境組成的整體。雖然有些咬文嚼字,但可以肯定第二種說法更確切。閉包只是在形式和表現(xiàn)上像函數(shù),但實(shí)際上不是函數(shù)。函數(shù)是一些可執(zhí)行的代碼,這些代碼在函數(shù)被定義后就確定了,不會在執(zhí)行時(shí)發(fā)生變化,所以一個(gè)函數(shù)只有一個(gè)實(shí)例。
閉包在運(yùn)行時(shí)可以有多個(gè)實(shí)例,不同的引用環(huán)境和相同的函數(shù)組合可以產(chǎn)生不同的實(shí)例。所謂引用環(huán)境是指在程序執(zhí)行中的某個(gè)點(diǎn)所有處于活躍狀態(tài)的約束所組成的集合。其中的約束是指一個(gè)變量的名字和其所代表的對象之間的聯(lián)系。那么為什么要把引用環(huán)境與函數(shù)組合起來呢?這主要是因?yàn)樵谥С智短鬃饔糜虻恼Z言中,有時(shí)不能簡單直接地確定函數(shù)的引用環(huán)境。
閉包和函數(shù)對象本質(zhì)上是同一種東西,閉包是函數(shù)對象的簡化。閉包將環(huán)境數(shù)據(jù)保存在func_closure中,函數(shù)對象則將相關(guān)數(shù)據(jù)保存在對象中。二者均可用于filter、map、reduce等函數(shù)中。
下面分別使用閉包和函數(shù)對象來做同一件事情,感覺二者非常相似。
?[Copy to clipboard]View Code PYTHONIn [68]: class counter_class(): def __init__(self, start_at): self.start_at = start_at def __call__(self): self.start_at += 1 return self.start_at ....: ....: In [74]: In [75]: c1 = counter_class(5) In [76]: c1() Out[76]: 6 In [77]: c1() Out[77]: 7 In [78]: c1() Out[78]: 8
In [80]: def counter_closure(start_at = 0): count = [start_at] def incr(): count[0] += 1 return count[0] return incr ....: In [86]: c2 = counter_closure(5) In [87]: c2() Out[87]: 6 In [88]: c2() Out[88]: 7 In [89]: c2() Out[89]: 8
支持閉包的語言有這樣的特性:
1、函數(shù)是一階值(First-class value),即函數(shù)可以作為另一個(gè)函數(shù)的返回值或參數(shù),還可以作為一個(gè)變量的值。
2、函數(shù)可以嵌套定義,即在一個(gè)函數(shù)內(nèi)部可以定義另一個(gè)函數(shù)。
顯然Python對這兩個(gè)特性支持都非常好,Java要想支持閉包改動(dòng)就有點(diǎn)大了。在Python中函數(shù)同類差不多,而在Java中類是最小的組織單元,目前JDK 6.0上面兩個(gè)特性一個(gè)都不支持。至于C++這樣更底層的語言要支持閉包估計(jì)是不可能的。
Python中的閉包
Python因其簡單易學(xué)、功能強(qiáng)大而擁有很多擁護(hù)者,很多企業(yè)和組織在使用這種語言。Python使用縮進(jìn)來區(qū)分作用域的做法也十分有特點(diǎn)。下面是一個(gè)Python的例子:
清單 6. Python 1 def addx(x): def adder (y): return x + y return adder add8 = addx(8) add9 = addx(9) print add8(100) print add9(100)
在Python中使用def來定義函數(shù)時(shí),是必須有名字的,要想使用匿名函數(shù),則需要使用lambda語句,象下面的代碼這樣:
清單 7. Python 2 def addx(x): return lambda y: x + y add8 = addx(8) add9 = addx(9) print add8(100) print add9(100)
到此,相信大家對“Python閉包的概念、形式與應(yīng)用方式”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章題目:Python閉包的概念、形式與應(yīng)用方式
網(wǎng)頁路徑:http://www.yijiale78.com/article26/pcsecg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站營銷、ChatGPT、網(wǎng)站導(dǎo)航、Google、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)