পাইথনে অভ্যন্তরীণ ফাংশন নিয়ে কাজ করার সময় সূক্ষ্ম বিষয়াদি

পাইথনে শুধুমাত্র নেস্টেড ফাংশনই থাকতে পারে না, একটি ফাংশন আরেকটি ফাংশনও রিটার্ন করতে পারে। উদাহরণস্বরূপ, ধরা যাক ফাংশন 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)

কনসোলে কী প্রিন্ট হবে বলুন।