ল্যাম্বডা, ম্যাপ এবং ফিল্টার (Lambda, Map & Filter)
ল্যাম্বডা ফাংশন — এক লাইনের বিস্ময় (Lambda Functions — One-Line Wonders)
ল্যাম্বডা (lambda) হলো একটি মিনি ফাংশন যা এতই ছোট যে এর কোনো নাম দেওয়ার প্রয়োজন হয় না। এটিকে একটি স্টিকি নোট বা ছোট চিরকুটের সাথে তুলনা করতে পারেন যেটিতে দ্রুত কিছু নির্দেশ লেখা থাকে: "এই সংখ্যাটিকে দ্বিগুণ করো" বা "এটি কি জোড় সংখ্যা?"। আপনি এটি একবার ব্যবহার করেন এবং তারপর ফেলে দেন।
এর লেখার নিয়ম বা সিনট্যাক্স হলো: lambda parameters: expression
মূল নিয়মসমূহ:
- শুধুমাত্র একটি এক্সপ্রেশন (expression) থাকবে — কোনো স্টেটমেন্ট,
if/forব্লক, বা অ্যাসাইনমেন্ট থাকবে না। - এটি স্বয়ংক্রিয়ভাবে সেই এক্সপ্রেশনের রেসাল্ট বা ফলাফলটি রিটার্ন করে (কোনো
returnকীওয়ার্ডের প্রয়োজন হয় না)। sorted(),map(), এবংfilter()এর মতো ফাংশনগুলোতে দ্রুত একটি আর্গুমেন্ট হিসেবে ব্যবহার করার জন্য এটি সবচেয়ে ভালো।
ল্যাম্বডা এর বেসিকস (Lambda Basics)
map() — প্রতিটি উপাদানে পরিবর্তন আনুন (map() — Transform Every Item)
map() একটি ফাংশন গ্রহণ করে এবং এটিকে কোনো ইটারেবলের (iterable) প্রতিটি উপাদানে বা আইটেমে প্রয়োগ করে, অনেকটা প্রতিটি জিনিসকে কোনো মেশিনের ভেতর দিয়ে পাঠানোর মতো। এটি একটি ম্যাপ অবজেক্ট (লেজি বা lazy) রিটার্ন করে, তাই এর ফলাফল বা রেসাল্ট দেখতে এটিকে list() দিয়ে মুড়িয়ে দিন।
প্যাটার্ন: map(function, iterable)
এটি মূলত লিস্ট কম্প্রিহেনশনের (list comprehensions) একটি ফাংশনাল প্রোগ্রামিং বিকল্প। কাজের ধরনের ওপর ভিত্তি করে যেটি পড়তে বেশি সহজ মনে হয়, সেটিই ব্যবহার করুন।
map() এর ব্যবহার (map() in Action)
filter() — যা শর্ত পূরণ করে কেবল তা-ই রাখুন (filter() — Keep Only What Passes)
filter() অনেকটা অফিসের বা ব্যাংকের দারোয়ানের মতো — এটি প্রতিটি আইটেমকে একটি শর্তের ওপর ভিত্তি করে যাচাই করে এবং কেবল সেগুলোকেই ভেতরে ঢুকতে দেয় যেগুলোর ফলাফল True হয়।
প্যাটার্ন: filter(function, iterable)
ফাংশনটিকে প্রতিটি আইটেমের জন্য True (রাখবে) অথবা False (বাতিল করবে) রিটার্ন করতে হবে।
filter() এবং reduce() (filter() and reduce())
sorted() এর সাথে key — নিজের মতো করে সাজানো (sorted() with key — Custom Sorting)
sorted() এর key প্যারামিটারটি হলো সেই জায়গা যেখানে ল্যাম্বডার সবচেয়ে ভালো কাজ দেখা যায়। আপনি এটিকে এমন একটি ফাংশন দেন যা প্রতিটি আইটেম থেকে "সাজানোর মান (sort value)" বের করে আনে। পাইথন এই বের করা মানগুলো ব্যবহার করেই তাদের ক্রম বা অর্ডার (order) নির্ধারণ করে।
key এর সাহায্যে কাস্টম সর্টিং (Custom Sorting with key)
list(map(lambda x: x**2, nums)) এর চেয়ে [x**2 for x in nums] পড়া সাধারণত বেশি সহজ। কিন্তু যখন আপনি sorted(key=...) তে কোনো ফাংশন পাস করছেন বা কোনো কলব্যাক ব্যবহার করছেন, তখন ল্যাম্বডাই হলো একদম সঠিক টুল।