Python之我對閉包理解1

2021-10-06 22:29:51 字數 1681 閱讀 4989

『』『』

閉包 針對函式而言,是在在函式中提出的概念:

條件:1.外部函式中定義了內部函式(即有函式巢狀)

2.外部函式有返回值

3.外部函式返回的值是:內部函式名(即函式入口位址) 為方便記憶不搞混淆,我們這裡可以說返回的是函式名

4.內部函式呼叫(引用)了外部函式的變數 不引用不叫嚴格的閉包

格式:def 外部函式():

…def 內部函式():

…return 內部函式名

『』』

def

func()

: a =

100def

inner_func()

: b =

90print

(a,b)

# print(a)

# inner_func()

# 直接訪問,在外界是訪問不了函式內部的變數和函式

有這樣乙個需求我們想在外界想要訪問函式內部a的值那麼如何拿到呢?

def

func()

: a =

100def

inner_func()

: b =

90print

(a,b)

return a # 這裡把函式的a給仍出去了

# 外界接收一下a

x = func(

)print

(x)

訪問函式內部的函式呢?而不是在內部呼叫函式,同理既然可以扔出a 那麼也就可以把函式扔出去(注意:這裡扔出去的是函式名)下面通過locals()列印看出端倪

def

func()

: a =

100def

inner_func()

: b =

90print

(a,b)

# inner_func() # 這裡是內部呼叫函式

print

(locals()

)# 作用是把函式裡面宣告的變數展示出來 列印結果: 通過列印就不過多解釋

return inner_func # 這裡把函式的給仍出去了

# 外界接收一下函式

x = func(

)print

(x)# 列印結果.inner_func at 0x000001262e712510> 通過列印我們知道x內部函式,就是func_inner函式

# 我們知道怎麼呼叫函式呢? 函式名+括號 x()x()

# 列印結果 100 90

# 閉包

deffunc

(a,b)

: c =

10def

inner_func()

: s = a+b+c

print

('相加之後的結果是:'

,s)return inner_func

# func(6,9)() 這是一種快捷呼叫方法

# 呼叫func

ifunc = func(6,

9)# ifunc變數就是inner_func ifunc = inner_func

# 呼叫返出來的內部函式

ifunc(

)

Python之我對閉包的理解2

1.儲存返回返回閉包時的狀態 外層函式值的狀態 def func a,b c 10def inner func 建立乙個內部函式就佔乙個位址,扔出來的是不會被 的 s a b c print 相加之後的結果是 s print locals return inner func 呼叫func func ...

python中對閉包的理解(1)

今天聊下python中閉包的用法,首先它是在函式內再定義乙個函式,內部定義的函式可以引用外部函式的引數和區域性變數,在呼叫外部函式時返回的是內部函式,但是不會立馬執行內部函式的程式體,需要單獨呼叫內部函式才會去執行。下面的程式就是閉包 首先正常定義乙個求和函式 def sum args s 0 fo...

閉包學習之我的理解

學習資料 url demo toggle 如下例,內部函式引用外部函式的變數 這裡是變數i 該內部函式即形成閉包,閉 是指內部函式中的變數對於外部不可見 而內部函式可以引用外部變數 思考 照此理解,我們應該經常在不知不覺中使用著閉包,只要我們在客戶端環境下定義乙個函式,而 該函式引用了全域性變數,那...