Python語言特性 閉包

2021-09-02 22:57:33 字數 1267 閱讀 4350

1.閉包的概述

閉包是指在乙個函式中定義了乙個另外乙個函式,內函式裡運用了外函式的臨時變數,並且外函式的返回值是內函式的引用,這樣就構成了乙個閉包。

2.閉包的特點

總結一下,建立乙個閉包必須滿足以下幾點:

由於這樣的特點, 使用閉包,可以隱藏內部函式的工作細節,只給外部使用者提供乙個可以執行的內部函式的引用。

3.閉包舉例

利用函式可以被傳遞和返回的特性,在開發過程中,可以隱藏更多的實現細節。

n = 1   # 全域性變數

def show(): # 公有函式

print('show: ',n)

def callfunc(func): #公有函式

return func

s = callfunc(show) # 函式執行

s()show()

在這段**中,在實際開發中並沒有實際意義,只是簡單示意了函式可以被當做引數和返回值使用。

但是這段**並不完美

第一,盡量不要使用全域性變數,因為全域性變數會破壞程式的封裝性。

第二,如果 show 函式不想被 callfunc 以外的函式進行訪問時,是無法控制的。

所以可以改進如下:

def callfunc():

n = 1

def show():

print('show: ', n)

return show

s = callfunc()

s()# show() 因為 show 函式定義在 callfunc 內部,所以外部不可見,不能使用

**改進後,去掉了全域性變數的使用。而且將 show 函式封裝在了 callfunc 函式內部,使外部不可見,不能使用 show 函式,隱藏了實現細節

程式在執行時,callfunc 函式返回了內部定義的 show 函式,並且 在 show 函式內部使用了外部函式的變數。

在 show 函式返回時,儲存了當前的執行環境,也就是會在 show 函式中使用的外部變數 n 。

因為 n 是乙個 callfunc 函式中的區域性變數,正常情況下 callfunc 函式執行結束後,n 就會被釋放。

但是現在因為 callfunc 函式中返回了 show 函式,show 函式在外部還會再執行,所以程式會將 show 函式所需的執行環境儲存下來。

這種形式就是閉包。閉包就像個空心球一樣,你知道外面和裡面,但你不知道中間是什麼樣。

python 閉包 python 閉包

閉包 因為python中函式也可以當作物件,所以如果出現當我們返回乙個函式,而該函式含有外部變數的時候就形成了閉包。閉包的特點 是個巢狀函式 可以獲得非區域性的變數 將函式當作物件返回 看乙個例子會更易理解 def make printer msg msg hi there def printer ...

python怎麼閉包 Python閉包

python閉包教程 閉包就是乙個 在閉包的記憶功能 在 python 中,獲到閉包中的變數讓閉包本身擁有了記憶效應,閉包中的邏輯可以修改閉包捕獲的變數,變數會跟隨閉包生命期一直存在,閉包本身就如同變數一樣擁有了記憶功能。python閉包定義詳解 語法def func param def func ...

python閉包技巧 Python閉包

本篇文章幫大家學習python閉包,包含了python閉包使用方法 操作技巧 例項演示和注意事項,有一定的學習價值,大家可以用來參考。在本文中,您將了解什麼是python閉包,如何定義閉包以及應該如何使用閉包。巢狀函式中的非區域性變數 在進入閉包之前,我們必須先了解乙個巢狀函式和非區域性變數。在函式...