閉包 Python中的閉包

2021-09-06 18:06:41 字數 1172 閱讀 9415

通俗地講就是別人家有某個東西,你想拿到但是因為許可權不夠(不打死你才怪),但是你可以跟家裡的孩子套近乎,通過他拿到!這個家就是區域性作用域,外部無法訪問內部變數,孩子是從家裡返回物件,對家裡的東西有訪問許可權,借助返回物件間接訪問內部變數!

def outer():      #------別人家

x = 10 #別人家裡的東西

def inner(): #內部函式------別人家的小孩

print(x) #外部函式的乙個變數

return inner #------返回小孩

f = outer() #到別人家 「套近乎」別人的小孩,套出(返回)小孩f

f() #f小孩執行

# 呼叫inner()函式的方法

1、法一

outer()()

2、法二

f = outer()

f()

閉包的概念

在一些語言中,在函式中可以(巢狀)定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在乙個函式與一組「私有」變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。—— 維基百科

用比較容易懂的人話說,就是當某個函式被當成物件返回時,夾帶了外部變數,就形成了乙個閉包。看例子。

何時使用閉包

其實閉包在python中很常見,只不過你沒特別注意這就是乙個閉包。比如python中的裝飾器decorator,假如你需要寫乙個帶引數的裝飾器,那麼一般都會生成閉包。

我個人認為,閉包存在的意義就是它夾帶了外部變數(私貨),如果它不夾帶私貨,它和普通的函式就沒有任何區別。同乙個的函式夾帶了不同的私貨,就實現了不同的功能。其實你也可以這麼理解,閉包和面向介面程式設計的概念很像,可以把閉包理解成輕量級的介面封裝。

如果內部修改外部變數需要nonlocal,global 

def f1():

print("in f1..")

num=111

def f2():

nonlocal num

num=222

print(num)

f2()

print(num)

f1()

原文:

python 閉包 Python中的閉包

一 什麼是閉包 在談之前,我們先來說說作用域,變數的作用域無非就兩種 全域性變數和區域性變數。函式內部可以直接讀取全域性變數,但是在函式外部無法讀取函式內部的區域性變數。出於種種原因,我們有時候需要獲取到函式內部的區域性變數。但是,正常情況下,這是辦不到的!只有通過變通的方法才能實現。於是就引入了閉...

python中閉包 python中的閉包

一 定義 如果在乙個內部函式裡,對在外部作用域 但不是在全域性作用域 的變數進行引用,那麼內部函式就被認為是閉包 closure 這個定義是相對直白的,閉包有三個條件 1.函式巢狀 2,內部函式呼叫外部函式的變數 3.返回內部函式 defa a defb b s a breturnsreturnb ...

python 閉包 python 閉包

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