อ้างอิงจากPython 3 อ้างอิง :
คำสั่ง nonlocal ทำให้ตัวระบุที่ระบุไว้ในการอ้างถึงตัวแปรที่ถูกผูกไว้ก่อนหน้านี้ในขอบเขตการปิดล้อมที่ใกล้ที่สุดไม่รวม globals
ดังที่ได้กล่าวไว้ในการอ้างอิงในกรณีที่ฟังก์ชั่นซ้อนหลายฟังก์ชั่นตัวแปรเฉพาะในฟังก์ชั่นการปิดล้อมที่ใกล้ที่สุดมีการแก้ไข:
def outer():
def inner():
def innermost():
nonlocal x
x = 3
x = 2
innermost()
if x == 3: print('Inner x has been modified')
x = 1
inner()
if x == 3: print('Outer x has been modified')
x = 0
outer()
if x == 3: print('Global x has been modified')
# Inner x has been modified
ตัวแปร "ที่ใกล้ที่สุด" อาจอยู่ห่างออกไปหลายระดับ:
def outer():
def inner():
def innermost():
nonlocal x
x = 3
innermost()
x = 1
inner()
if x == 3: print('Outer x has been modified')
x = 0
outer()
if x == 3: print('Global x has been modified')
# Outer x has been modified
แต่มันไม่สามารถเป็นตัวแปรส่วนกลางได้:
def outer():
def inner():
def innermost():
nonlocal x
x = 3
innermost()
inner()
x = 0
outer()
if x == 3: print('Global x has been modified')
# SyntaxError: no binding for nonlocal 'x' found