閉包:在一個外函數中定義了一個內函數,內函數裏運用了外函數的臨時變量,並且外函數的返回值是內函數的引用。
def Line_1 (k,b):
def get_y (x):
print(k*x+b)
return get_y #注意:返回只能返回內函數的函數引用,不能帶括號,否在就是返回內部函數的返回值
line_1_1 = Line_1(1,2)
line_1_1(0)
line_1_1(1)
line_1_1(2)
line_1_2 = Line1_1(11,22)
line_1_2(0)
line_1_2(1)
line_1_2(2)
打印結果:
2,3,4
22,33,44
Q:函數、匿名函數、閉包、對象的區別?
A: 普通函數:能夠完成基本的簡單功能,傳遞是這個函數的引用,只有功能
匿名函數:能夠完成較爲複雜的功能,傳遞的事這個函數的引用,只有功能
閉包:能夠將較爲複雜的功能,傳遞是這個閉包中的函數及數據。因此是功能+數據
對象:能夠完成較爲複雜的功能,傳遞的是很多數據和很多功能,因此傳遞是功能+數據
測試Demo
x = 300
def test1():
X = 200
def test2():
nonlocal
print("----1---x=%d" %x )
x = 100
print("----2---x=%d" %x )
return test2
t1 = test1()
t1()
輸出結果:----1—x=200
----2—x=100