python閉包

閉包:在一個外函數中定義了一個內函數,內函數裏運用了外函數的臨時變量,並且外函數的返回值是內函數的引用。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章