Python中的閉包是一種特殊的函數,它可以在函數內部定義另一個函數,並且返回該函數。閉包的特點是內部函數可以訪問外部函數的變數和參數,即使外部函數已經執行完畢,內部函數仍然可以使用這些變數和參數。閉包的作用有:
- 可以讀取外部函數的局部變數,實現變數的封裝和隱藏。
- 可以保持外部函數的局部變數在內存中,實現變數的持久化和共享。
- 可以根據外部函數的參數,動態創建不同功能的函數,實現函數的柯里化和裝飾。
閉包的語法如下:
def outer_func(*args, **kwargs):
# 定義外部函數的變數和參數
outer_var = ...
# 定義內部函數
def inner_func():
# 使用外部函數的變數和參數
print(outer_var)
# 定義內部函數的邏輯
...
# 返回內部函數的引用
return inner_func
其中,outer_func是外部函數,inner_func是內部函數,outer_var是外部函數的變數或參數。inner_func可以使用outer_var,即使outer_func已經結束。返回inner_func的引用,可以在外部調用inner_func,或者賦值給其他變數。
例一個求冪的函數:
def power(n):
# 定義外部函數的參數n
def exponent(x):
# 使用外部函數的參數n
return x ** n
# 返回內部函數的引用
return exponent
square = power(2) # 創建平方函數
cube = power(3) # 創建立方函數
print(square(4)) # 16
print(cube(4)) # 64