পাইথনে অভ্যন্তরীণ ফাংশন নিয়ে কাজ করার সময় সূক্ষ্ম বিষয়াদি
পাইথনে শুধুমাত্র নেস্টেড ফাংশনই থাকতে পারে না,
একটি ফাংশন আরেকটি ফাংশনও রিটার্ন করতে পারে।
উদাহরণস্বরূপ, ধরা যাক ফাংশন outer
ফলাফল হিসেবে ফাংশন inner-এর সোর্স কোড
রিটার্ন করে:
def outer():
def inner():
return '+++'
return inner
আসুন outer কলটি
res ভেরিয়েবলে লিখি:
res = outer()
print(res)
কোড এক্সিকিউট হওয়ার পরে ফাংশনের সাথে একটি অবজেক্ট প্রিন্ট হবে:
<function outer.<locals>.inner at 0x000001564A212B90>
যদি res ভেরিয়েবলটিকে
বন্ধনী সহ কল করা হয়, তাহলে '+++' মেসেজটি
রিটার্ন হবে:
print(res()) # প্রিন্ট করবে '+++'
কোডটি এভাবে পুনরায় লেখা যেতে পারে যাতে res-এ
outer নিজেকে কল করার জন্য এবং ফাংশন
inner কল করার জন্য দুইটি বন্ধনী সহ লেখা হয়।
যা থেকে বোঝা যায় যে বাহ্যিক ফাংশনের ডান পাশে
এর ভিতরে নেস্টেড ফাংশনের সংখ্যা অনুযায়ী অতিরিক্ত
বন্ধনী যোগ করা যেতে পারে:
res = outer()()
print(res) # প্রিন্ট করবে '+++'
নিম্নলিখিত কোডটি দেওয়া আছে:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
কনসোলে কী প্রিন্ট হবে বলুন।
নিম্নলিখিত কোডটি দেওয়া আছে:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
কনসোলে কী প্রিন্ট হবে বলুন।