Python for AI/Functions, Modules ও Packages/Lesson 17
Lambda, map ও filter
Function-ও একটা value — variable-এ রাখা, অন্য function-এ পাঠানো যায়। lambda, map, filter, আর কখন comprehension বেশি ভালো।
- সময়
- 20 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Python-এ function-ও একটা value — ঠিক সংখ্যা বা string-এর মতো। Variable-এ রাখা যায়, list-এ রাখা যায়, অন্য function-এ argument হিসেবে পাঠানো যায়:
খেয়াল করো: speak = shout লিখেছি, shout() না — function-টাকেই রাখছি, ডাকছি না।
আর lambda হলো নাম ছাড়া, এক লাইনের ছোট function।
কেন দরকার?
অনেক function আরেকটা function চায় — "কীভাবে কাজ করবে" সেটা বলে দেওয়ার জন্য:
sorted(data, key=...)— কোন নিয়মে সাজাবে- Pandas-এ
df["price"].apply(...)— প্রতিটা মানে কী করবে - PyTorch-এ data transform, scikit-learn-এ custom scoring
প্রতিবার আলাদা def লেখা ঝামেলার। Lambda সেখানে কাজে লাগে।
lambda
কাঠামো:
lambda parameters : expression
(input) (যেটার মান return হবে)
Lambda-তে return লিখতে হয় না — expression-এর মানই return হয়। কিন্তু শুধু একটা expression — loop বা একাধিক লাইন চলে না।
সাধারণত lambda variable-এ রাখা হয় না (তখন
def-ই ভালো)। এটা সরাসরি অন্য function-এ পাঠানোর জন্য।
map(): প্রতিটায় একই কাজ
map সাথে সাথে list দেয় না — একটা lazy object দেয়, যেটা দরকার হলে একটা একটা করে মান বানায়। তাই list() দিয়ে ঘিরতে হয়।
filter(): শর্ত মানলে রাখো
দ্বিতীয় উদাহরণে str.strip খালি/space-ওয়ালা string-এর জন্য "" দেয় — যেটা falsy — তাই বাদ যায়।
map/filter বনাম comprehension
একই কাজ দুইভাবে:
দ্বিতীয়টা পড়তে অনেক সহজ। Python community-র সাধারণ পরামর্শ: lambda লাগলে comprehension-ই ভালো। কিন্তু function আগে থেকেই থাকলে map বেশ পরিষ্কার:
দুটোই ঠিক। Code পড়ে যেটা বেশি স্বাভাবিক লাগে, সেটা লেখো।
Exercise
Exercise
map দিয়ে রূপান্তর
celsius list-এর প্রতিটা তাপমাত্রাকে Fahrenheit-এ রূপান্তর করে fahrenheit list বানাও — `map()` আর `lambda` দিয়ে।
সূত্র: F = C × 9/5 + 32
Quiz
Challenge
Challenge
Function pipeline
pipeline(value, *steps) function লেখো। steps হলো কয়েকটা function — value-এর ওপর একটার পর একটা চালাবে, আগেরটার output পরেরটার input। শেষ ফলাফল return করবে।
কোনো step না দিলে value-টাই ফেরত দেবে। যেমন:
pipeline(" Hello AI ", str.strip, str.lower) → "hello ai"
বাস্তবে কোথায় ব্যবহার হয়?
তুমি challenge-এ যা বানালে, সেটাই ML-এর preprocessing pipeline-এর মূল ধারণা। text-কে model-এ দেওয়ার আগে কয়েকটা ধাপ:
scikit-learn-এর Pipeline, torchvision-এর transforms.Compose — দুটোই ঠিক এই ধারণার ওপর তৈরি: ধাপগুলোর একটা list, একটার পর একটা চালানো।
Interview প্রশ্ন
- Beginner: Lambda আর সাধারণ function-এর পার্থক্য কী?
- Intermediate: "Function is a first-class object" — এর মানে কী? উদাহরণ দাও।
- Advanced: Loop-এর ভেতরে lambda বানালে
[lambda: i for i in range(3)]— প্রতিটা কেন 2 return করে? (Late binding: lambdai-এর মান ডাকার সময় দেখে, বানানোর সময় না।)
এরপর কী?
Function-এর ভেতরে বানানো variable বাইরে থেকে দেখা যায় না কেন? আর বাইরের variable ভেতর থেকে বদলানো যায় কি? পরের lesson: Scope।