Python-ում ներքին ֆունկցիայի հետ աշխատելու նրբությունները

Python-ում կարող են լինել ոչ միայն ներդիր ֆունկցիաներ, այլև մեկ ֆունկցիան կարող է վերադարձնել մեկ այլ ֆունկցիա: Օրինակ, թող outer ֆունկցիան վերադարձնի որպես արդյունք inner ֆունկցիայի սկզբնական կոդը:

pythondef outer():
  def inner():
    return '+++'

  return inner

Եկեք outer կանչը գրենք res փոփոխականի մեջ:

pythonres = outer()
print(res)

Կոդի կատարումից հետո կարտացոլվի օբյեկտ ֆունկցիայով:

python<function outer.<locals>.inner at 0x000001564A212B90>

Եթե res փոփոխականը կանչենք կլոր փակագծերով, ապա կվերադառնա '+++' հաղորդագրությունը:

pythonprint(res()) # կարտացոլի '+++'

Կարելի է վերագրել կոդն այնպես, որ res-ում գրվի outer երկու կլոր փակագծերով՝ ինքն իրեն և inner ֆունկցիան կանչելու համար: Դրանից բխում է, որ կարելի է գրել լրացուցիչ կլոր փակագծեր արտաքին ֆունկցիայից աջ՝ ըստ դրանում ներդրված ֆունկցիաների քանակի:

pythonres = outer()()
print(res) # կարտացոլի '+++'
Задание 1

Տրված է հետևյալ կոդը:

pythondef outer():
  def inner(num):
    return num + 2

  return inner
  
res = outer()(3)
print(res)

Ասեք, թե ինչ կարտացոլվի կոնսոլում:

Задание 2

Տրված է հետևյալ կոդը:

pythondef outer():
  def inner(txt):
    return 'hello, ' + txt

  return inner
  
res = outer()
print(res)

Ասեք, թե ինչ կարտացոլվի կոնսոլում: