閉包的含義

anyux發表於2024-09-03

目錄
  • 閉包的含義

閉包的含義

在一些語言中,在函式中可以(巢狀)定義另一個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包

閉包可以用來在一個函式與一組"私有"變數之間建立關聯關係.在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性.

這種叫做巢狀函式

def func1():
    print('func1')
    def func2():
        print('func2')
    func2()

func1()

此時對於當前檔案,a為全域性變數,b為區域性變數

a=1
def func3():
    print('func3')
    b=2
func3()
print(b)

一個函式的返回值,也可以是一個函式的引用

def func1():
    print('func1')
    def func2():
        print('func2')
    return func2
f1 = func1()
print(f1)
print(type(f1))
f1()

輸出結果如下

func1
<function func1.<locals>.func2 at 0x000002B933B84CC0>
<class 'function'>
func2

如果我們有一個函式,讓它可以任意的計算一個值的任意次冪等

def wapper(exponent):
    def exponent_of(base):
        return base ** exponent
    return exponent_of

#計算一個數字的平方
square = wapper(2)
#計算2,3,4的平方
print(square(2))
print(square(3))
print(square(4))

下面的執行結果就很像,透過wapper(2)持久化地獲取到一個工具,此工具可以將任意數字的平方返回,這種寫法就叫做閉包的寫法
執行結果

4
9
16

相關文章