1. 程式人生 > >python 中的 閉包 與 函式的區別

python 中的 閉包 與 函式的區別

定義:(重點在定義)

在外部函式裡面定義一個內部函式,並且這個內部函式用到了外部函式的變數,那麼將這個內部函式和用到的一些變數統稱為閉包。

首先看一個閉包的例項:

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

閉包和函式的區別:

  • 閉包:在閉包中,既有函式,又有資料,而且資料是閉包裡面獨有的資料,與外界無影響;

  • 函式:函式中,需要使用的全域性變數,在一定程度上是受到限制的,因為全域性變數不僅僅是一個函式使用,其他的函式也可能會使用到,一旦修改會影響到其他函式使用全域性變數,所以全域性變數不能隨便修改從而在函式的使用中受到一定侷限性。