ল্যাম্বডা ফাংশন কি?
পাইথনে, ফাংশনগুলি হল অবজেক্ট: এগুলি ভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে, অন্যান্য ফাংশন থেকে ফেরত দেওয়া যেতে পারে, তালিকা বা নির্দেশাবলীতে সংরক্ষণ করা যেতে পারে এবং অন্যান্য ফাংশনের জন্য প্যারামিটার হিসাবে পাস করা যেতে পারে। উদাহরণস্বরূপ, বিবেচনা করুন map()
অন্তর্নির্মিত ফাংশন। এর সিনট্যাক্স হল map(function, iterable)
এবং এটি সহজে প্রয়োগ করতে ব্যবহৃত হয় function
এর প্রতিটি উপাদানের কাছে iterable
.
map()
আসলে একটি ফেরত দেয়iterator
বস্তু অনুশীলনে, আমরা একটি হিসাবে ফলাফল নিক্ষেপlist
,tuple
,set
,dict
, ইত্যাদি, যেটি আরও সুবিধাজনক।
ধরুন আপনি ব্যবহার করে একটি তালিকার প্রতিটি পদ বর্গ করতে চানmap()
ফাংশন এটি করার জন্য, আমরা একটি সংজ্ঞায়িত করবsquare()
ফাংশন এবং প্যারামিটার হিসাবে এটি ব্যবহার করুনmap()
:
my_list = [1,2,3,4,5]
def square(x):
return x**2
my_modified_list = list(map(square, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]
তবে যদি আমাদের একমাত্র ব্যবহার হয় square()
ফাংশন এই তালিকা তৈরি করা হয়, এটি একটি ব্যবহার পরিষ্কার lambda
ফাংশন:
my_list = [1,2,3,4,5]
my_modified_list = list(map(lambda x: x**2, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]
পাইথনে, lambda
ফাংশন হল বেনামী ফাংশন যা তাদের নাম এবং সিনট্যাক্স অ্যালোঞ্জো চার্চ থেকে নেয় ল্যাম্বডা ক্যালকুলাস. তাদের সিনট্যাক্স হল:
lambda x_1,..., x_n : expression(x_1, ..., x_n)
এটি একটি বেনামী ফাংশন তৈরি করে যা ভেরিয়েবলগুলি ইনপুট হিসাবে গ্রহণ করে x_1, ..., x_n
এবং মূল্যায়ন ফেরত দেয় expression(x_1, ..., x_n)
.
উদ্দেশ্যে lambda
ফাংশনগুলিকে প্যারামিটার হিসাবে ব্যবহার করতে হয় যেগুলি ফাংশনগুলিকে প্যারামিটার হিসাবে গ্রহণ করে, যেমনটি আমরা করেছি map()
উপরে পাইথন আপনাকে একটি বরাদ্দ করতে দেয় lambda
একটি পরিবর্তনশীল ফাংশন, কিন্তু PEP 8 শৈলী গাইড এর বিরুদ্ধে পরামর্শ দেয়। আপনি যদি একটি ভেরিয়েবলে একটি সাধারণ ফাংশন বরাদ্দ করতে চান তবে এটি একটি এক-লাইন সংজ্ঞা হিসাবে করা ভাল। এটি নিশ্চিত করে যে ফলস্বরূপ বস্তুটির সঠিক নামকরণ করা হয়েছে, ট্রেসব্যাক পাঠযোগ্যতা উন্নত করে:
anonymous_square = lambda x : x**2
def named_square(x): return x**2
print(anonymous_square.__name__)
print(named_square.__name__)
a = anonymous_square
b = named_square
print(a.__name__)
print(b.__name__)
কেন ল্যাম্বডা ফাংশন ব্যবহার করবেন?
শেষ অনুচ্ছেদের পরে, আপনি ভাবছেন কেন আপনি একটি ব্যবহার করতে চান lambda
ফাংশন সব পরে, একটি সঙ্গে করা যেতে পারে যে কিছু lambda
ফাংশন একটি নামযুক্ত ফাংশন দিয়ে করা যেতে পারে।
এর উত্তর এই যে lambda
ফাংশন উদ্দেশ্য একটি গণনার প্রতিনিধিত্বকারী বৃহত্তর অভিব্যক্তির ভিতরে বাস করা। এটি সম্পর্কে চিন্তা করার একটি উপায় হল ভেরিয়েবল এবং মানের সাথে সাদৃশ্য। নিম্নলিখিত কোড বিবেচনা করুন:
x = 2
পরিবর্তনশীল x
পূর্ণসংখ্যার জন্য একটি স্থানধারক (বা একটি নাম) 2
. উদাহরণস্বরূপ, কল করা print(x)
এবং print(2)
ঠিক একই আউটপুট দেয়। ফাংশনের ক্ষেত্রে:
def square(x): return x**2
কাজ square()
একটি সংখ্যার বর্গ করার গণনার জন্য একটি স্থানধারক। এই গণনা একটি নামহীন ভাবে লেখা যেতে পারে হিসাবে lambda x: x**2
.
এই দার্শনিক ডিগ্রেশন অনুসরণ করে, এর জন্য অ্যাপ্লিকেশনের কিছু উদাহরণ দেখা যাক lambda
ফাংশন।
Sorted() ফাংশনের সাথে Lambda ব্যবহার করা
সার্জারির sorted()
ফাংশন একটি পুনরাবৃত্তিযোগ্য সাজান. এটি একটি ফাংশন হিসাবে গ্রহণ করে key
যুক্তি, এবং পুনরাবৃত্তিযোগ্য প্রতিটি উপাদানে প্রয়োগকৃত ফাংশনের ফলাফল উপাদানগুলিকে অর্ডার করতে ব্যবহৃত হয়।
এই একটি পুরোপুরি উপযুক্ত lambda
ফাংশন: সেট করে key
একটি সঙ্গে পরামিতি lambda
ফাংশন, আমরা উপাদানগুলির যেকোনো ধরনের বৈশিষ্ট্য অনুসারে সাজাতে পারি। উদাহরণস্বরূপ, আমরা উপাধি অনুসারে নামের তালিকা বাছাই করতে পারি:
name_list = ['Grace Hopper', 'Ada Lovelace', 'Emmy Noether', 'Marie Curie']
sorted_by_surname = sorted(name_list, key = lambda x: x.split()[1])
print(sorted_by_surname)
['Marie Curie', 'Grace Hopper', 'Ada Lovelace', 'Emmy Noether']
'ফিল্টার()' ফাংশনের সাথে ল্যাম্বডা ব্যবহার করা
সার্জারির filter()
ফাংশনের নিম্নলিখিত সিনট্যাক্স রয়েছে: filter(function, iterable)
এবং এটি এর উপাদানগুলিকে আউটপুট করে iterable
যা মূল্যায়ন করে function(element)
সত্য হিসাবে (এটি অনুরূপ একটি WHERE
SQL এ ধারা)। আমরা ব্যবহার করতে পারি lambda
এর জন্য পরামিতি হিসাবে কাজ করে filter()
একটি পুনরাবৃত্তিযোগ্য থেকে উপাদান নির্বাচন করতে।
নিম্নলিখিত উদাহরণ বিবেচনা করুন:
num_list = list(range(0,100))
multiples_of_15= filter(lambda x: (x % 3 == 0) and (x % 5 == 0), num_list)
print(list(multiples_of_15))
[0, 15, 30, 45, 60, 75, 90]
filter()
প্রয়োগ করে lambda
ক্রিয়া lambda x: (x % 3 == 0) and (x % 5 == 0)
প্রতিটি উপাদানের জন্য range(0,100)
, এবং একটি ফেরত দেয় filter
বস্তু আমরা এটি হিসাবে ঢালাই দ্বারা উপাদান অ্যাক্সেস list
.
ম্যাপ() ফাংশনের সাথে ল্যাম্বডা ব্যবহার করা
আমাদের শেষ উদাহরণ এমন কিছু যা আমরা ভূমিকাতে দেখেছি - map()
ফাংশন দ্য map()
ফাংশন সিনট্যাক্স হল: map(function, iterable)
, এবং map()
প্রযোজ্য function
প্রতিটি উপাদানের জন্য iterable
, প্রত্যাবর্তন a map
একটি ঢালাই দ্বারা অ্যাক্সেস করা যেতে পারে যে বস্তু list
.
আমরা দেখেছি কীভাবে এটি তালিকায় প্রয়োগ করা যেতে পারে, তবে এটি ব্যবহার করে নির্দেশাবলীতে প্রয়োগ করা যেতে পারে dict.items()
পদ্ধতি:
my_data = {'Mary':1, 'Alice':2, 'Bob':0}
map_obj = map(lambda x: f'{x[0]} had {x[1]} little lamb', my_data.items())
print(', '.join((map_obj)))
Mary had 1 little lamb, Alice had 2 little lamb, Bob had 0 little lamb
অথবা একটি স্ট্রিং থেকে:
my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
আমরা ব্যবহার করতে পারি map()
বুদ্ধিমান উপায়ে ফাংশন - একটি উদাহরণ হল একই ইনপুটে অনেকগুলি ফাংশন প্রয়োগ করা।
উদাহরণস্বরূপ, ধরুন আপনি একটি API তৈরি করছেন যা একটি পাঠ্য স্ট্রিং গ্রহণ করে এবং আপনি এতে ফাংশনের একটি তালিকা প্রয়োগ করতে চান।
প্রতিটি ফাংশন পাঠ্য থেকে কিছু বৈশিষ্ট্য বের করে। আমরা যে বৈশিষ্ট্যগুলি বের করতে চাই তা হল শব্দের সংখ্যা, দ্বিতীয় শব্দ এবং চতুর্থ শব্দের চতুর্থ অক্ষর:
def number_of_words(text):
return len(text.split())
def second_word(text):
return text.split()[1]
def fourth_letter_of_fourth_word(text):
return text.split()[3][3]
function_list = [number_of_words, second_word, fourth_letter_of_fourth_word]
my_text = 'Mary had a little lamb'
map_obj = map(lambda f: f(my_text), function_list)
feature_list = list(map_obj)
print(feature_list)
[5, 'had', 't']
উপসংহার
এই গাইডে, আমরা এর কার্যকারিতা অন্বেষণ করেছি lambda
পাইথনে ফাংশন। আমরা সেটা দেখেছি lambda
ফাংশন হল বেনামী ফাংশন যা অন্যান্য ফাংশনের জন্য ইনলাইন ফাংশন প্যারামিটার হিসাবে ব্যবহার করা হয়। আমরা কিছু ব্যবহারের ক্ষেত্রে দেখেছি সেইসাথে কখন সেগুলি ব্যবহার করবেন না।
প্রোগ্রামিং করার সময়, ডোনাল্ড নুথের উদ্ধৃতিটি মনে রাখা গুরুত্বপূর্ণ: "প্রোগ্রামগুলি মানুষের দ্বারা পড়ার জন্য এবং শুধুমাত্র ঘটনাক্রমে কম্পিউটার চালানোর জন্য।" এই কথা মাথায় রেখে, lambda
ফাংশন আমাদের কোড সহজ করার জন্য একটি দরকারী টুল, কিন্তু বুদ্ধিমানের সাথে ব্যবহার করা উচিত।