คำสั่ง nonlocal ใน Python

มีบางกรณีที่ในฟังก์ชันภายนอก มีตัวแปรที่จำเป็นต้องเข้าถึงได้ ในฟังก์ชันภายใน ลองประกาศ ตัวแปร i ในฟังก์ชัน outer ในส่วนของฟังก์ชันภายใน ตัวแปรนี้ จะเป็นตัวแปรภายนอก (ตัวแปรส่วนกลาง คือตัวแปรที่ประกาศไว้เฉพาะ ในโค้ดภายนอกเท่านั้น) และกำหนดให้ฟังก์ชัน inner เพิ่มค่า i ขึ้นหนึ่ง:

pythondef outer():
  i = 0

  def inner():
    i += 1  # จะแสดงผล [4, 9, 25]

  inner()

  return i

อย่างไรก็ตาม สำหรับ inner ตัวแปร i เป็นตัวแปรโลคัล Python ถือว่ามัน ไม่ได้ประกาศไว้และแสดงข้อผิดพลาด ที่เกี่ยวข้อง ก่อนหน้านี้ข้อผิดพลาดดังกล่าวได้รับการแก้ไข โดยใช้คำสั่ง global อย่างไรก็ตาม ที่นี่ i เป็นตัวแปรภายนอก ดังนั้นจึงควรใช้คำสั่ง nonlocal มันจะนำชื่อตัวแปรที่ระบุ ไปยังขอบเขตการมองเห็นที่ใกล้ที่สุด โดยไม่รวมขอบเขตส่วนกลาง นั่นคือ i ภายใน inner จะถูกนำมาจากตัวแปร ที่ประกาศไว้ก่อนหน้าฟังก์ชันนี้:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # จะแสดงผล 1
Задание 1

ในโค้ดต่อไปนี้ โปรแกรมเมอร์บางคน ทำผิดพลาด:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

มีอะไรผิดปกติกับโค้ดนี้? หาและแก้ไข ข้อผิดพลาดของผู้เขียนโค้ด

Задание 2

ในโค้ดต่อไปนี้ โปรแกรมเมอร์บางคน ทำผิดพลาด:

pythonnum = 3
def outer():
  num += 1
  tst = num

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

มีอะไรผิดปกติกับโค้ดนี้? หาและแก้ไข ข้อผิดพลาดของผู้เขียนโค้ด