一、什麼是nonlocal關鍵字
在一些需要函數嵌套實現的場景中,內層函數有時需要調用外部函數中的變數。在Python中,函數嵌套會導致作用域嵌套,內部作用域可以訪問外部作用域中的變數,但是在調用時,如果要修改外部作用域中變數的值,就必須使用nonlocal關鍵字。
def outer_func(): count = 0 def inner_func(): nonlocal count count += 1 print(count) return inner_func
上面的代碼中,inner_func函數用於實現計數器,並且每次調用後count的值都會加1。我們可以先定義outer_func函數用於返回一個inner_func的引用,然後在多次調用inner_func的時候,發現每次調用後計數器的值都會加1。
if __name__ == '__main__': counter = outer_func() counter() # 1 counter() # 2 counter() # 3
二、nonlocal關鍵字的使用方法
使用nonlocal關鍵字的方法很簡單,只需要在函數內部使用nonlocal關鍵字聲明一下需要修改的外層變數的名稱即可。
def outer_func(): count = 0 def inner_func(): nonlocal count count += 1 print(count) return inner_func
上面的代碼中,我們聲明了需要修改的變數count,並且在inner_func函數中對count變數進行了修改,這樣就能在內部的作用域中訪問並修改外部的變數了。
三、nonlocal限制
在Python 3.0之前,Python沒有nonlocal關鍵字,但是,可以使用global關鍵字實現類似的效果。然而,在Python 3.0之後,global關鍵字只能訪問全局變數,不能用於訪問外部函數的變數。因此,如果要在內層函數中訪問外部函數的變數,必須使用nonlocal關鍵字。
除此之外,在Python3.7之前的版本中,nonlocal關鍵字只能在函數內部聲明一次,在Python3.7之後,可以在函數內部聲明多次。非局部變數的值存儲在一個字典中,因此,如果使用過多的nonlocal變數,可能會影響程序的性能。
四、小結
Python的nonlocal關鍵字提供了一種方便的方式,在內嵌函數中使用外層函數的變數。如果沒有nonlocal關鍵字,我們需要將變數設置為全局變數,這會導致一些不好處理的副作用,而nonlocal關鍵字則能夠改善這種情況。
原創文章,作者:IDGQN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313489.html