python教程閉包 python高階教程之閉包

2021-10-11 13:01:56 字數 2149 閱讀 7528

閉包

1. 函式引用

def test1():

print("--- in test1 func----")

#呼叫函式

test1()

#引用函式

ret = test1

print(id(ret))

print(id(test1))

#通過引用呼叫函式

ret()

執行結果:

--- in test1 func----

--- in test1 func----

2. 什麼是閉包

#定義乙個函式

def test(number):

#在函式內部再定義乙個函式,並且這個函式用到了外邊函式的變數,那麼將這個函式以及用到的一些變數稱之為閉包

def test_in(number_in):

print("in test_in 函式, number_in is %d"%number_in)

return number+number_in

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

return test_in

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

ret = test(20)

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

print(ret(100))

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

print(ret(200))

執行結果:

in test_in 函式, number_in is 100

in test_in 函式, number_in is 200

3. 閉包再理解

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

# closure.py

def counter(start=0):

count=[start]

def incr():

count[0] += 1

return count[0]

return incr

啟動python直譯器

>>>import closeure

>>>c1=closeure.counter(5)

>>>print(c1())

>>>print(c1())

>>>c2=closeure.counter(100)

>>>print(c2())

>>>print(c2())

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

def counter(start=0):

def incr():

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())

4. 看乙個閉包的實際例子:

def line_conf(a, b):

def line(x):

return a*x + b

return line

line1 = line_conf(1, 1)

line2 = line_conf(4, 5)

print(line1(5))

print(line2(5))

這個例子中,函式line與變數a,b構成閉包。在建立閉包的時候,我們通過line_conf的引數a,b說明了這兩個變數的取值,這樣,我們就確定了函式的最終形式(y = x + 1和y = 4x + 5)。我們只需要變換引數a,b,就可以獲得不同的直線表達函式。由此,我們可以看到,閉包也具有提高**可復用性的作用

如果沒有閉包,我們需要每次建立直線函式的時候同時說明a,b,x。這樣,我們就需要更多的引數傳遞,也減少了**的可移植性。

閉包思考:

1.閉包似優化了變數,原來需要類物件完成的工作,閉包也可以完成

2.由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消耗記憶體

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閉包,如何定義閉包以及應該如何使用閉包。巢狀函式中的非區域性變數 在進入閉包之前,我們必須先了解乙個巢狀函式和非區域性變數。在函式...