python 中的 閉包 與 函式的區別
阿新 • • 發佈:2018-12-14
定義:(重點在定義)
在外部函式裡面定義一個內部函式,並且這個內部函式用到了外部函式的變數,那麼將這個內部函式和用到的一些變數統稱為閉包。
首先看一個閉包的例項:
def lines(a, b):
def line(x):
return a * x + b
return line
line1 = lines(1, 1) # 可以得到 直線1:y=x+1
line2 = lines(4, 5) # 可以得到 直線2:y=4x+5
print(line1(5))
print(line2(5))
我們只需要變換引數a,b,就可以獲得不同的直線表達函式;通過這個閉包的例項,可以看出,閉包的一個好處是,提高程式碼的複用率。
修改外部函式中的變數:
def outer(num1):
def inner():
# nonlocal是閉包內部變數的宣告:宣告變數不是區域性變數,這樣下方的程式碼可以對外部函式傳入的變數進行修改
nonlocal num1
num1 += 1
return num1
return inner
ret = outer(100) # 得到內部函式inner的指向
print(ret()) # 呼叫inner函式,並列印inner函式的返回值 結果為101
閉包和函式的區別:
-
閉包:在閉包中,既有函式,又有資料,而且資料是閉包裡面獨有的資料,與外界無影響;
-
函式:函式中,需要使用的全域性變數,在一定程度上是受到限制的,因為全域性變數不僅僅是一個函式使用,其他的函式也可能會使用到,一旦修改會影響到其他函式使用全域性變數,所以全域性變數不能隨便修改從而在函式的使用中受到一定侷限性。