python_閉包問題

  • 閉包的概念
  • 閉包的相關例子
  • 相關問題的解決

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 解決了問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章