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:
def 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:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # akan memaparkan 1
Dalam kod berikut, seorang pengaturcara telah melakukan kesilapan:
num = 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.
Dalam kod berikut, seorang pengaturcara telah melakukan kesilapan:
num = 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.