談談python閉包
阿新 • • 發佈:2018-12-12
用一句話說說什麼是閉包:
閉包本質上是一個函式,如果在一個函式內部,嵌套了函式,這個內部函式對(非全域性作用域)外部作用域的變數進行引用,那麼這個內部函式稱為閉包。閉包使得這些變數的值始終儲存在記憶體中。
其中閉包有時常常涉及到一個關鍵字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())
參考: