Penyata nonlocal dalam Python

Terdapat kes di mana fungsi luaran mempunyai pembolehubah yang perlu diakses oleh fungsi dalaman. Mari isytiharkan pembolehubah i dalam fungsi outer. Berkaitan dengan fungsi dalaman, pembolehubah ini akan menjadi luaran (pembolehubah global hanya yang diisytiharkan dalam kod luaran). Dan untuk fungsi inner, kita tetapkan penambahan satu kepada i:

pythondef outer():
  i = 0

  def inner():
    i += 1  # akan menghasilkan ralat

  inner()

  return i

Walau bagaimanapun, untuk inner, pembolehubah i adalah lokal, Python menganggapnya tidak diisytiharkan dan memaparkan ralat yang sepadan. Dahulu, ralat sedemikian diperbetulkan menggunakan penyata global. Walau bagaimanapun, di sini i adalah pembolehubah luaran, oleh itu arahan nonlocal harus digunakan. Ia mengambil nama pembolehubah yang disenaraikan dalam skop yang terdekat, tidak termasuk skop global, iaitu i di dalam inner akan diambil dari pembolehubah yang diisytiharkan di atas fungsi ini:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # akan memaparkan 1
Задание 1

Dalam kod berikut, seorang pengaturcara telah melakukan kesilapan:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Apakah masalah dengan kod ini? Cari dan betulkan ralat pengarang kod.

Задание 2

Dalam kod berikut, seorang pengaturcara telah melakukan kesilapan:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Apakah masalah dengan kod ini? Cari dan betulkan ralat pengarang kod.