- 閉包的概念
- 閉包的相關例子
- 相關問題的解決
1 閉包問題的概念
簡單來說, 函數定義了函數外引用的變量,並且該函數可以在定義外執行。
2閉包的相關例子
先來看一個問題吧
def my_fun1():
x = 5
def my_fun2():
x *= x
return x
return my_fun2()
my_fun1()
結果是:UnboundLocalError: local variable 'x' referenced before assignment
python認爲第一個x=5的定義是外部函數,所以進入my_fun2()的時候就報錯了。在python3之前是沒有解決方案的,只能間接地通過容器類型來存放,因爲容器類型不是存放在棧裏面,所以會被屏蔽掉。
改進方法
def my_fun1():
x = 5
def my_fun2():
nonlocal x
x *= x
return x
return my_fun2()
my_fun1()
加入了 nonlocal 解決了問題