Instruksi nonlocal di Python

Ada kalanya dalam fungsi luar terdapat variabel yang perlu diakses dalam fungsi dalam. Mari deklarasikan variabel i dalam fungsi outer. Relatif terhadap fungsi dalam, variabel ini akan menjadi variabel non-lokal (yang bersifat global hanyalah variabel yang dideklarasikan DI LUAR kode fungsi). Dan untuk fungsi inner kita berikan penambahan satu ke i:

pythondef outer():
  i = 0

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

  inner()

  return i

Namun bagi inner, variabel i dianggap sebagai variabel lokal, Python menganggapnya tidak terdeklarasi dan menampilkan error yang sesuai. Dulu, error seperti ini diperbaiki dengan menggunakan instruksi global. Namun di sini i adalah variabel non-lokal, oleh karena itu seharusnya digunakan instruksi nonlocal. Instruksi ini mengambil nama-nama variabel yang disebutkan ke ruang lingkup terdekat, tidak termasuk yang global, artinya i di dalam inner akan diambil dari variabel yang dideklarasikan di atas fungsi tersebut:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

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

Dalam kode berikut, seorang programmer membuat kesalahan:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Apa yang salah dengan kode ini? Temukan dan perbaiki kesalahan pembuat kode.

Задание 2

Dalam kode berikut, seorang programmer membuat kesalahan:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Apa yang salah dengan kode ini? Temukan dan perbaiki kesalahan pembuat kode.