非區域性變數
Python 3.x >= 3.0
Python 3 新增了一個名為 nonlocal 的新關鍵字。nonlocal 關鍵字將範圍覆蓋新增到內部範圍。你可以在 PEP 3104 中閱讀所有相關內容。最好用幾個程式碼示例來說明這一點。最常見的一個例子是建立可以遞增的函式:
def counter():
num = 0
def incrementer():
num += 1
return num
return incrementer
如果你嘗試執行此程式碼,你將收到 **UnboundLocalError,**因為 num 變數在最內層函式中分配之前被引用。讓我們新增非本地組合:
def counter():
num = 0
def incrementer():
nonlocal num
num += 1
return num
return incrementer
c = counter()
c() # = 1
c() # = 2
c() # = 3
基本上 nonlocal
將允許你分配外部範圍中的變數,但不能分配給全域性範圍。因此,你不能在我們的 counter
函式中使用 nonlocal
,因為它會嘗試分配到全域性範圍。嘗試一下,你會很快得到一個 SyntaxError
。相反,你必須在巢狀函式中使用 nonlocal
。
(請注意,使用生成器可以更好地實現此處提供的功能。)