Python-daky nonlocal buýrugy
Käbir ýagdaýlarda daşarky funksiýada
içki funksiýadan elýeter bolmagy zerur bolan
üýtgeýän baha bar bolýar. Biz
outer funksiýasynda i
üýtgeýän bahasyny ýaryþdýarys.
Içki funksiýa degiþli bolan bu
üýtgeýän baha daşarky (global)
bolýar (global üýtgeýän bahalar diňe
daşarky koda ýaryþdylan üýtgeýän bahalardyr).
Biz inner funksiýasyna i
üýtgeýän bahasyna bir goþmagy tabşyrýarys:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25] görkezer
inner()
return i
Emma inner üçin i üýtgeýän bahasy
ýerli üýtgeýän bahadyr, Python ony
ýaryþdyrylmadyk hasaplaýar we degiþli
ýalňyşlygy görkezýär. Öň bu ýaly ýalňyşlyk
global buýrugy bilen düzeldilýärdi.
Emma bu ýerde i daşarky üýtgeýän bahadyr,
şonuň üçin biz nonlocal buýrugyny ulanyp bilmelidiris.
Ol kesgitleýär ki, sanalan üýtgeýän bahalaryň adyny
iň ýakyn gözleg giňiþliginden almaly,
globaly çykaryp, ýagny i
inner içinde ýokarky funksiýada ýaryþdylan
üýtgeýän bahadan alnary:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1 görkezer
Aşakdaky kodda käbir programmist ýalňyşlyk etdi:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Bu kod bilen nämä baþlaþdy? Kod awtorynyň ýalňyşlygyny tapyň we düzediň.
Aşakdaky kodda käbir programmist ýalňyşlyk etdi:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Bu kod bilen nämä baþlaþdy? Kod awtorynyň ýalňyşlygyny tapyň we düzediň.