คำสั่ง nonlocal ใน Python
มีบางกรณีที่ในฟังก์ชันภายนอก
มีตัวแปรที่จำเป็นต้องเข้าถึงได้
ในฟังก์ชันภายใน ลองประกาศ
ตัวแปร i ในฟังก์ชัน
outer
ในส่วนของฟังก์ชันภายใน ตัวแปรนี้
จะเป็นตัวแปรภายนอก (ตัวแปรส่วนกลาง
คือตัวแปรที่ประกาศไว้เฉพาะ
ในโค้ดภายนอกเท่านั้น) และกำหนดให้ฟังก์ชัน
inner
เพิ่มค่า i ขึ้นหนึ่ง:
def outer():
i = 0
def inner():
i += 1 # จะแสดงผล [4, 9, 25]
inner()
return i
อย่างไรก็ตาม สำหรับ inner ตัวแปร i
เป็นตัวแปรโลคัล Python ถือว่ามัน
ไม่ได้ประกาศไว้และแสดงข้อผิดพลาด
ที่เกี่ยวข้อง ก่อนหน้านี้ข้อผิดพลาดดังกล่าวได้รับการแก้ไข
โดยใช้คำสั่ง global อย่างไรก็ตาม
ที่นี่ i เป็นตัวแปรภายนอก
ดังนั้นจึงควรใช้คำสั่ง
nonlocal มันจะนำชื่อตัวแปรที่ระบุ
ไปยังขอบเขตการมองเห็นที่ใกล้ที่สุด
โดยไม่รวมขอบเขตส่วนกลาง นั่นคือ i
ภายใน inner จะถูกนำมาจากตัวแปร
ที่ประกาศไว้ก่อนหน้าฟังก์ชันนี้:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # จะแสดงผล 1
ในโค้ดต่อไปนี้ โปรแกรมเมอร์บางคน ทำผิดพลาด:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
มีอะไรผิดปกติกับโค้ดนี้? หาและแก้ไข ข้อผิดพลาดของผู้เขียนโค้ด
ในโค้ดต่อไปนี้ โปรแกรมเมอร์บางคน ทำผิดพลาด:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
มีอะไรผิดปกติกับโค้ดนี้? หาและแก้ไข ข้อผิดพลาดของผู้เขียนโค้ด