目錄
- 閉包的含義
閉包的含義
在一些語言中,在函式中可以(巢狀)定義另一個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包
閉包可以用來在一個函式與一組"私有"變數之間建立關聯關係.在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性.
這種叫做巢狀函式
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