非區域性變數

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

(請注意,使用生成器可以更好地實現此處提供的功能。)