nonlocal հրամանը Python-ում

Լինում են դեպքեր, երբ արտաքին ֆունկցիայում կա փոփոխական, որին անհրաժեշտ է մուտք ունենալ ներքին ֆունկցիայում: Ֆունկցիայի outer մեջ հայտարարենք i փոփոխականը: Ներքին ֆունկցիայի նկատմամբ այս փոփոխականը կլինի արտաքին (գլոբալ են միայն դրսի կոդում հայտարարված փոփոխականները): Ֆունկցիային inner նշանակենք i-ին մեկ գումարելը:

pythondef outer():
  i = 0

  def inner():
    i += 1  # կտպի [4, 9, 25]

  inner()

  return i

Սակայն inner-ի համար i փոփոխականը լոկալ է, Python-ը այն համարում է չհայտարարված և ցույց է տալիս համապատասխան սխալը: Նախկինում նմանատիպ սխալը շտկվում էր global հրամանի միջոցով: Սակայն այստեղ i-ն արտաքին փոփոխական է, ուստի պետք է օգտագործել nonlocal հրամանը: Այն վերցնում է թվարկված փոփոխականների անունները մոտակա տեսանելիության տիրույթում, բացառելով գլոբալը, այսինքն՝ i inner-ի ներսում կվերցվի այն փոփոխականից, որը հայտարարված է այս ֆունկցիայից վեր:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # կտպի 1
Задание 1

Հետևյալ կոդում ինչ-որ ծրագրավորող սխալ է թույլ տվել:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Ի՞նչն է սխալ այս կոդում: Գտեք և շտկեք կոդի հեղինակի սխալը:

Задание 2

Հետևյալ կոդում ինչ-որ ծրագրավորող սխալ է թույլ տվել:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Ի՞նչն է սխալ այս կոդում: Գտեք և շտկեք կոդի հեղինակի սխալը: