python裡的閉包

2022-01-29 22:52:21 字數 1842 閱讀 8646

1

#定義乙個函式

2def

test(number): 34

#在函式內部再定義乙個函式,並且這個函式用到了外邊函式的變數,那麼稱裡面 的這個函式為閉包

5def

test_in(number_in):

6print("

in test_in 函式, number_in is %d

"%number_in)

7return number+number_in8#

其實這裡返回的就是閉包的結果

9return

test_in

101112#

給test函式賦值,這個20就是給引數number

13 ret = test(20)

1415

#注意這裡的100其實給引數number_in

16print(ret(100))

1718

#注意這裡的200其實給引數number_in

19print(ret(200))

2021

執行結果:

22in test_in 函式, number_in is 100

23 120

2425

in test_in 函式, number_in is 200

26 220

#

內部函式對外部函式作用域裡變數的引用(非全域性變數),則稱內部函式為閉包。

#closure.py

def counter(start=0):

count=[start]

defincr():

count[0] += 1

return

count[0]

return

incr

#啟動python直譯器

>>>import

closeure

>>>c1=closeure.counter(5)

>>>print

(c1())

6>>>print

(c1())

7>>>c2=closeure.counter(100)

>>>print

(c2())

101>>>print

(c2())

102#

nonlocal訪問外部函式的區域性變數

def counter(start=0):

defincr():

nonlocal start

start += 1

return

start

return

incr

c1 = counter(5)

print

(c1())

print

(c1())

c2 = counter(50)

print

(c2())

print

(c2())

print

(c1())

print

(c1())

print

(c2())

print(c2())

閉包(closure)是函式式程式設計的重要的語法結構。閉包也是一種組織**的結構,它同樣提高了**的可重複使用性。當乙個內嵌函式引用其外部作作用域的變數,我們就會得到乙個閉包. 總結一下,建立乙個閉包必須滿足以下幾點:

1. 必須有乙個內嵌函式

2. 內嵌函式必須引用外部函式中的變數

3. 外部函式的返回值必須是內嵌函式

當函式執行完後, 並不被銷毀,而是繼續留在記憶體空間裡.這個功能類似類裡的類變數,只不過遷移到了函式上.

python 閉包 python 閉包

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

python怎麼閉包 python的閉包

一 思考乙個問題 我們要給定乙個x,要求一條直線上x對應的y的值。公式是y kx b。我們需要用k,b來確定這條直線,則我們實現的函式應該有3個引數 defline k,b,x print k x b line 1,3,4 line 1,3,5 line 1,3,6 可以看到,我們每次修改x都要重新...

python 閉包 Python中的閉包

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