কম্পিউটার টিউটোরিয়াল

পাইথন ল্যাম্বডা ফাংশন: একটি পরিচিতি

পাইথন ল্যাম্বডা ফাংশন হলো একক লাইন, ಅನোনিমাস ফাংশন। পাইথনে ল্যাম্বডা এক্সপ্রেশন একক লাইন ফাংশনের জন্য উপকারী যেগুলো নাম দরকার নেই, যেমন লিস্ট ফিল্টার করা, স্ট্রিং কেস কনভার্ট করা, বা একটি সংখ্যা গুণ করা।


যখন আপনি একটি প্রোগ্রাম লিখছেন যা একই টাস্ক একাধিক বার পারফর্ম করবে, আপনার কোড রিপিট করা অপ্র্যাক্টিক্যাল কারণ তার মানে আপনাকে এর সব ইনস্ট্যান্স আপডেট করতে হবে যদি টাস্ক কীভাবে কাজ করে সেটি চেঞ্জ করতে হয়। আপনার কোডবেস যত বড় হবে, এই চেঞ্জগুলো করতে ততক্ষণ বেশি লাগবে।

সেই কারণে ফাংশনগুলো কাজে আসে। পাইথনে, একটি স্পেশাল টাইপের ফাংশন আছে যাকে অনোনিমাস ফাংশন বলা হয় যা আপনাকে কুইক ফাংশন ডিক্লেয়ার করার অনুমতি দেয়: ল্যাম্বডা এক্সপ্রেশন।

এই গাইডে পাইথনে ল্যাম্বডা ফাংশন কীভাবে ব্যবহার করে রিপিটেটিভ প্রসেস অটোমেট করা যায় সেটি আলোচনা করা হবে। আমরা ল্যাম্বডা ফাংশন একশনের দুটি উদাহরণও দেব যাতে আপনার নিজস্ব ল্যাম্বডা ফাংশন লিখতে প্রয়োজনীয় সকল মটেরিয়াল আপনার पास থাকে।

ফাংশন কী?

প্রোগ্রামিং-এ, একটি ফাংশন হলো কোডের একটি ব্লক যা একটি স্পেসিফিক টাস্ক পারফর্ম করে।

কোডাররা ফাংশন ব্যবহার করার একটি বড় কারণ হলো এগুলো তাদের কোডে রিপিটিশন কমাতে সাহায্য করে। আপনি যদি একটি প্রসেসকে একটি ফাংশনে বান্ডল করেন, আপনি সেটিকে আপনার প্রোগ্রামে যেকোনো জায়গা থেকে কল করতে পারেন। আপনাকে আপনার কোড একাধিক বার রিপিট করতে হবে না।

এটি ডেভেলপারদের আরও মেইনটেইনেবল কোড লিখতে সাহায্য করে। যদি আপনাকে সেই প্রসেসে চেঞ্জ আনতে হয়, আপনাকে শুধু আপনার ফাংশন মডিফাই করতে হবে। আপনাকে একাধিক লাইন কোডে চেঞ্জ আনতে হবে না যেগুলো কপি-পেস্ট করা আছে আপনার প্রোগ্রামে।

পাইথনে একটি ফাংশন উদাহরণ:

def say_hello(name):
    print("Hello there, " + name)
say_hello("Arthur")

যখন আমরা এই কোড রান করি, নিচের আউটপুট রিটার্ন হয়: Hello there, Arthur।

যদিও এই ফাংশনগুলো উপকারী, আপনি যদি কিছু সিম্পল করতে চান যেমন একটি স্ট্রিং লিস্টের সব স্ট্রিংকে লোয়ারকেস করা, তবে একটি ফাংশন লিখা কাফি ভার্বোজ। আপনাকে আপনার কোড কাজ করার জন্য একটি নতুন ফাংশনকে নাম দিয়ে অ্যাসাইন করতে হতো। সেই কারণেই ল্যাম্বডা ফাংশন কাজে আসে।

ল্যাম্বডা ফাংশন কী?

একটি ল্যাম্বডা ফাংশন হলো একটি ফাংশন টাইপ যেটি নাম ছাড়া ডিফাইন করা হয়। এই ফাংশনগুলোকেও কখনও কখনও অনোনিমাস ফাংশন বলা হয়, কারণ এদের নাম দরকার নেই। যেভাবে আমাদের আগের ফাংশনটির নাম sayHello ছিল এবং "def" ব্যবহার করে ডিফাইন করা ছিল, ল্যাম্বডা ফাংশনকে নাম দরকার নেই এবং "lambda" ব্যবহার করে ডিফাইন করা হয়।

ল্যাম্বডা ফাংশন ব্যবহার করার প্রধান সুবিধা হলো এটি এক লাইনে লিখা যায়। এটি ল্যাম্বডা ফাংশনকে উপকারী করে তোলে যদি আপনার একটি কুইক প্রসেস থাকে যেটি আপনি একাধিক বার পারফর্ম করতে চান। এখানে কিছু উদাহরণ যেখানে ল্যাম্বডা ফাংশন হেল্পফুল হতে পারে:

  • একটি সংখ্যা গুণ করা
  • একটি স্ট্রিংকে আপারকেস বা লোয়ারকেস-এ কনভার্ট করা
  • একটি লিস্ট ফিল্টার করা

পাইথনে একটি ল্যাম্বডা ফাংশন তৈরির সিনট্যাক্স:

name = lambda arguments: expression

আপনি ল্যাম্বডা ফাংশনের সাথে যত ইচ্ছা তত আর্গুমেন্ট স্পেসিফাই করতে পারেন। চলুন একটি উদাহরণের মাধ্যমে ইলাস্ট্রেট করি কীভাবে একটি ল্যাম্বডা ফাংশন পাইথনে কাজ করে। ধরুন আমরা একটি সংখ্যা সাত দিয়ে গুণ করতে চাই। এতে করতে আমরা নিচের ফাংশন ব্যবহার করতে পারি:

def multiply_by_seven(number):
    return number * 7
print(multiply_by_seven(2))

যখন আমরা এই কোড রান করি, নিচের আউটপুট রিটার্ন হয়: 14।

যদিও এই কোড কাজ করে, এটি যতটা দক্ষ হতে পারতো उतনা নয়। আমরা আমাদের ফাংশনের নাম এবং আর্গুমেন্ট ডিফাইন করতে এক পুরো লাইন কোড খরচ করেছি এবং অন্য এক লাইন কোড ক্যালকুলেট এবং রিটার্ন করতে। আমাদের ফাংশনকে আরও দক্ষ করার জন্য, আমরা একটি ল্যাম্বডা ফাংশন ব্যবহার করতে পারি।

এখানে একটি ল্যাম্বডা ফাংশন যেটি উপরের মতো একই অ্যাকশন পারফর্ম করে:

multiply_by_seven = lambda n: n * 7
print(multiply_by_seven(2))

আমাদের কোড রিটার্ন করে: 14। আপনি দেখতে পাচ্ছেন, আমাদের ফাংশনের আউটপুট একই। পার্থক্য হলো আমরা একটি রেগুলার ফাংশনের বদলে ল্যাম্বডা ফাংশন ব্যবহার করেছি। এই কেসে:

  • lambda কীওয়ার্ড ইন্ডিকেট করে যে আমরা একটি ল্যাম্বডা ফাংশন ডিক্লেয়ার করছি
  • n আমাদের ফাংশনের আর্গুমেন্ট।
  • n * 7 হলো আমাদের ল্যাম্বডা ফাংশনে স্পেসিফাই করা একক এক্সপ্রেশন।

ল্যাম্বডা ফাংশন কখন ব্যবহার করা হয়?

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

প্রায়শই, ল্যাম্বডা ফাংশন বিল্ট-ইন ফাংশন যেমন reduce() ফাংশন, map() ফাংশন বা filter() ফাংশনের সাথে ব্যবহার করা হয়। ল্যাম্বডা ফাংশন কখনও কখনও লিস্ট কমপ্রিহেনশনের সাথে ব্যবহার করা হয় রিপিটেটিভ টাস্ক পারফর্ম করতে।

ধরি আমাদের একটি বেকারি আছে এবং আমরা আমাদের বিক্রয় হওয়া সকল পাইর লিস্ট তৈরি করতে চাই আমাদের বিক্রয় হওয়া সকল বেক্ড গুডসের লিস্ট বেস করে। আমরা নিচের কোড ব্যবহার করে এটি করতে পারি:

baked_goods = ['Blondie', 'Chocolate Chip Cookie', 'Apple Pie', 'Pecan Pie', 'Blackberry Pie', 'Scone']
pies = filter(lambda pie: "Pie" in pie, baked_goods)
print(list(pies))

আমাদের কোড রিটার্ন করে:

['Apple Pie', 'Pecan Pie', 'Blackberry Pie']

চলুন ব্রেক ডাউন করি কীভাবে এটি কাজ করল। কোডের প্রথম লাইনে, আমরা বেক্ড গুডসের একটি লিস্ট ডিক্লেয়ার করেছি। তারপর, আমরা filter() ফাংশন ব্যবহার করেছি সকল বেক্ড গুডস ফিল্টার আউট করতে যেগুলো "Pie" শব্দটি ধারণ করে। filter() ফাংশন আমাদের "baked_goods" লিস্টের প্রতিটি আইটেমের মধ্য দিয়ে ইটারেট করতে এবং নির্দিষ্ট কRITEARIA মিট না করে যেসব আইটেম সেগুলো ফিল্টার আউট করতে অনুমতি দিল।

আমরা এটি একটি ল্যাম্বডা ফাংশন ডিফাইন করে করেছি যা চেক করে প্রতিটি স্ট্রিং "Pie" ধারণ করে কিনা, এবং শুধু স্ট্রিংটি রিটার্ন করে যদি সেটি "Pie" ধারণ করে। এই কেসে, আমাদের ল্যাম্বডা ফাংশন:

lambda pie: "Pie" in pie

আপনি এই উদাহরণ থেকে দেখতে পাচ্ছেন যে পাইথন ল্যাম্বডা ফাংশনকে নাম দরকার নেই। সেগুলো ইন-লাইন অস্তিত্ব থাকতে পারে, ট্র্যাডিশনাল ফাংশনদের বিপরীতে। যদি একটি আইটেম আমাদের কRITEARIA মিট করে, আমাদের ল্যাম্বডা এক্সপ্রেশন True রিটার্ন করে; অন্যথায় কোনো ভ্যালু রিটার্ন করা হয় না।

অবশেষে, আমরা "pies" ভেরিয়েবলকে একটি লিস্ট-এ কনভার্ট করি এবং কনসোলে প্রিন্ট করি। আমরা এটি করি কারণ filter() একটি কাস্টম ফিল্টার অবজেক্ট রিটার্ন করে, তাই আমাদের পাইর দেখতে list() ব্যবহার করে কনভার্ট করতে হয়।

উপসংহার

ল্যাম্বডা ফাংশন, যাকে অনোনিমাস ফাংশনও বলা হয়, আপনাকে একটি ফাংশন নাম ছাড়া ডিফাইন করতে দেয়। এগুলো উপকারী যদি আপনাকে আপনার কোডে একই অ্যাকশন একাধিক বার পারফর্ম করতে হয়।

উদাহরণস্বরূপ, আপনি যদি একটি সংখ্যা অন্য সংখ্যা দিয়ে গুণ করতে চান, আপনি একটি ল্যাম্বডা ফাংশন ব্যবহার করতে পারেন; অথবা আপনি একটি লিস্টে আইটেম ফিল্টার আউট করতে ল্যাম্বডা ফাংশন ব্যবহার করতে পারেন।

  1. পাইথন Tkinter-এ ল্যাম্বডা (lambda) ফাংশন সহ বাটন কমান্ড

  2. পাইথনে অ্যানোনিমাস ফাংশন (Anonymous Functions)

  3. পাইথনে issubset() ফাংশন

  4. পাইথনে intersection() ফাংশন