nonlocal հրամանը Python-ում
Լինում են դեպքեր, երբ արտաքին ֆունկցիայում
կա փոփոխական, որին անհրաժեշտ է մուտք ունենալ
ներքին ֆունկցիայում: Ֆունկցիայի outer
մեջ հայտարարենք i փոփոխականը:
Ներքին ֆունկցիայի նկատմամբ այս
փոփոխականը կլինի արտաքին (գլոբալ են
միայն դրսի կոդում հայտարարված փոփոխականները):
Ֆունկցիային inner
նշանակենք i-ին մեկ գումարելը:
def outer():
i = 0
def inner():
i += 1 # կտպի [4, 9, 25]
inner()
return i
Սակայն inner-ի համար i
փոփոխականը լոկալ է, Python-ը այն համարում է
չհայտարարված և ցույց է տալիս համապատասխան
սխալը: Նախկինում նմանատիպ սխալը շտկվում էր
global հրամանի միջոցով: Սակայն
այստեղ i-ն արտաքին փոփոխական է,
ուստի պետք է օգտագործել
nonlocal հրամանը: Այն վերցնում է թվարկված
փոփոխականների անունները մոտակա տեսանելիության
տիրույթում, բացառելով գլոբալը, այսինքն՝ i
inner-ի ներսում կվերցվի այն փոփոխականից,
որը հայտարարված է այս ֆունկցիայից վեր:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # կտպի 1
Հետևյալ կոդում ինչ-որ ծրագրավորող սխալ է թույլ տվել:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Ի՞նչն է սխալ այս կոդում: Գտեք և շտկեք կոդի հեղինակի սխալը:
Հետևյալ կոդում ինչ-որ ծրագրավորող սխալ է թույլ տվել:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Ի՞նչն է սխալ այս կոդում: Գտեք և շտկեք կոդի հեղինակի սխալը: