Skip to content

Latest commit

 

History

History
35 lines (23 loc) · 5.19 KB

lambda.md

File metadata and controls

35 lines (23 loc) · 5.19 KB

ল্যাম্বডা

এই চ্যাপ্টারটি সর্বশেষ হালনাগাদ হয়েছেঃ {{ file.mtime }} সময়ে

সাধারণভাবে যখন def কিওয়ার্ড ব্যবহার করে একটি ফাংশন তৈরি করা হয় তখন স্বয়ংক্রিয় ভাবে এটিকে একটি ভ্যারিয়েবলে অ্যাসাইন করে দেয়া হয় যার মাধ্যমে একে পরবর্তীতে কল করা যায়। আবার অন্যদিকে, খুব সহজেই স্ট্রিং বা ইন্টিজার টাইপ ভ্যালুকে কোন রকম ভ্যারিয়েবলে অ্যাসাইন করা ছাড়াও তৈরি করা যায়। ঠিক এই সুবিধাটি (ভ্যারিয়েবলে অ্যাসাইন না করা) ফাংশনের ক্ষেত্রেও উপযোগ করা যায় এবং lambda এর মাধ্যমে। এভাবে তৈরি ফাংশনকে anonymous ফাংশন বলা হয়ে থাকে।

ল্যাম্বডার ব্যবহার খুব ফলপ্রসূ হয় যখন খুব সিম্পল যেমন এক লাইনের একটি ফাংশনকে আরেকটি ফাংশনের আর্গুমেন্ট হিসেবে পাঠানোর দরকার পরে। অর্থাৎ যখন সেই এক লাইনের কাজ করা ফাংশনকে আলাদা ভাবে def দিয়ে ডিফাইন/তৈরি করা অনর্থক মনে হয়।

lambda x,y: x+y - প্রথমে lambda কিওয়ার্ড লিখে এর আর্গুমেন্ট গুলোকে লেখা হয় এবং একটি কোলন দেয়ার পর এই ল্যাম্বডা তথা ফাংশনের কর্মকাণ্ড লেখা হয়। যেমন এই ল্যাম্বডাটি দুটো আর্গুমেন্ট নেয় এবং কাজের কাজ বলতে সেই দুটোকে যোগ করে।

উদাহরণ -

>>> def my_function(func, arg):
...     return func(arg)
...
>>> print(my_function(lambda x: 2 * x, 5))
10

উপরের উদাহরণে, my_function আর্গুমেন্ট হিসেবে একটি ফাংশন এবং একটি ভ্যালু নেয়। এরপর, আমরা যখন my_function কে কল করছি এবং তার মধ্যে একটি ফাংশন এবং একটি ভ্যালু পাঠিয়ে দেয়ার দরকার মনে করছি তখন ফাংশন না পাঠিয়ে একটি ল্যাম্বডা lambda x: 2 * x কে পাঠাচ্ছি এবং 5 পাঠাচ্ছি। ওদিকে, my_function সেই ল্যাম্বডাকে ফাংশন হিসেবে ধরে নিয়ে এক্সিকিউট করছে এবং যেহেতু সেই ল্যাম্বডা ফাংশনের আবার একটি আর্গুমেন্ট আছে x, তার জন্য নিজের রিসিভ করা আর্গুমেন্ট 5 কে পাঠাচ্ছে (ফরওয়ার্ড করছে)।

আরেকটি উদাহরণ,

>>> print((lambda x,y: x + 2 * y)(2,3))
8

এখানকার ল্যাম্বডাটি দুটো আর্গুমেন্ট x এবং y নিয়ে x+2y সূত্র ব্যবহার করে একটি রেজাল্ট রিটার্ন করে। আমরা 2 এবং 3 কে পাঠিয়েছি এবং রিটার্ন হিসেবে 8 পেয়েছি যেটা print এর মাধ্যমে প্রকাশিত হয়েছে। যেহেতু ল্যাম্বডা anonymous ফাংশন তাই একে আলাদা করে কল করার দরকার হয় না। এ ধরনের ফাংশনের একটি অসুবিধা হচ্ছে এর মধ্যে শুধু এক লাইনের এক্সপ্রেশন/কোড প্রসেস করা সম্ভব।

print("Nuhil") লিখে যেভাবে একটি String ভ্যালুকে কোথাও স্টোর করা ছাড়াই তৈরি এবং প্রিন্ট করা সম্ভব হল, সেভাবেই উপরের উদাহরণে x+2y নিয়ে কাজ করা ফাংশনকে তৈরি এবং কল করা দুটোই সম্ভব হল কোথাও ষ্টোর (def) করা ছাড়াই।

সংকলন - নুহিল মেহেদী