1. 程式人生 > >談談python閉包

談談python閉包

用一句話說說什麼是閉包:

閉包本質上是一個函式,如果在一個函式內部,嵌套了函式,這個內部函式對(非全域性作用域)外部作用域的變數進行引用,那麼這個內部函式稱為閉包。閉包使得這些變數的值始終儲存在記憶體中。

其中閉包有時常常涉及到一個關鍵字nonlocal。

一句話說明一下nonlocal的作用:

當一個閉包,即一個巢狀函式引用了外部函式的變數時,需要對外部函式的變數進行修改則在巢狀函式中必須宣告該變數為nonlocal的,如果只讀方式訪問則不需要。
    # coding:utf-8
    
    
    def foo():
        x =
5 def inner(): nonlocal x x += 1 return x return inner p = foo() print(p()) print(p()) print(p())

這裡的閉包inner()需要修改外部變數x的內容,所以需要在巢狀函式中宣告x為nonlocal。

思考一下下面這個程式的結果:

def count():                                                                    
    fs =
[] for i in range(1, 4):def f(): ┆ ┆ ┆return i*i ┆ fs.append(f) return fs f1, f2, f3 = count() print (f1()) print (f2()) print (f3())

參考:

https://foofish.net/python-closure.html