您好,登錄后才能下訂單哦!
這篇文章主要介紹“python中的閉包是什么意思”,在日常操作中,相信很多人在python中的閉包是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python中的閉包是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
閉包就是函數內部定義的函數。
理解閉包的邏輯之后,有了一定python基礎的都可以很容易寫出閉包。下面通過案例來講一下閉包的邏輯。
def discount(x): if x<0.5 or x>1: return None def count(prince, number): result = prince * number pay = result * x print(f'總價是{result}元,實付{pay}元') return count discount(0.8)(2.88, 100) out: 總價是288.0元,實付230.4元
以上代碼是銷售商品時經常遇到的案例,discount函數是外層函數,用來檢測打折數字是否合理。count是內層函數,用來計算總金額和實付金額。
python解釋器遇到def discount時會在全局命名空間增加一個discount對象,它的值指向discount函數內的代碼塊。此時discount函數沒有運行。
在遇到discount(0.8)(2.88, 100)時開始運行函數discount(0.8),在遇到def count會在discount的局部命名空間增加一個count對象,它的值指向count函數內的代碼塊。在遇到return count時會把count對象返回給discount(0.8)(2.88,100)。此時discount(0.8)部分已經運行完畢,接下來運行的是count(2.88,100)。count(2.88,100)內部代碼塊運行完畢后,整個閉包函數運行完畢。
)
我們可以通過如下的方式對閉包進行擴展,更加方便使用:
def discount(x): if x < 0.5 or x > 1: print('折扣數字不合理。') return def count(prince, number): result = prince * number pay = result * x print(f'總價是{result}元,實付{pay}元') return count goldcard = discount(0.7) silvercard = discount(0.9) commomcard = discount(1) goldcard(2.88, 100) silvercard(2.88, 100) commomcard(2.88,100) print(id(goldcard)) print(id(silvercard)) print(id(commomcard)) out: 總價是288.0元,實付201.6元 總價是288.0元,實付259.2元 總價是288.0元,實付288.0元 1986802704096 1987081368336 1987081368192
將外層函數加參數賦值給另外一個變量,相當于定義了一個新的函數,提高了代碼復用率。上述goldcard、silvercard、commomcard這3個函數雖然都指向了discount函數,但是因為它們的參數不同,實際上是3個獨立的對象,可以看到它們的id各不相同。
到此,關于“python中的閉包是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。