閉包就是指: 在函數內部在定義一個函數,並且這個函數用到了外邊函數的變量,那麼將這個函數以及用到的一些變量稱之爲閉包。
def test (number):
print("----1----")
def test_in(number2):
print("----2------")
print(number+number2)
print("---3----")
return test_in
ret=test(100)
print('-'*30)
ret(1)
ret(100)
ret(200)
上面的這段代碼就是閉包的應用。
輸出:
------1------
------3------
----------------------------------
------2-----
101
------2-----
200
------2-----
300
程序解析:在執行ret=test(100),輸出了1和3可以看出,在調用閉包的外部函數時,程序並不會執行閉包內的函數,原因是test函數的返回值是test_in函數,所以他只是把test_in的函數體當成一個數據整體作爲test函數的返回並賦值給ret變量,所以接下來我們操作ret變量可以將它看成test_in函數來操作。這裏可以看出,閉包最大的作用就是當我們將函數用閉包的形式進行封裝,以後我們對該函數的操作他都是在基礎操作之上的進一步操作,比如這裏的初始給number=100,之後對閉包函數的任何操作都會在這個100的基礎上來進行。閉包函數對外部函數的變量的使用是一直持續的。
閉包的應用例子
問題:實現一次函數,可以通過x求任意y的值
def line_conf(a,b):
def line(x):
return a*x+b
return line
line1=line_conf(5,4)
line2=line_conf(3,4)
line1(2)
line2(3)