নীচে প্রশ্নে কোডের রেখাটি রয়েছে:
a = lambda _:True
এটা তোলে একটি ফাংশন একটি ইনপুট প্যারামিটার থাকার দিচ্ছে: _। ইনসকোরের পরিবর্তনশীল নামের পরিবর্তে এক অদ্ভুত পছন্দ, তবে এটি কেবল একটি পরিবর্তনশীল নাম। _ল্যাম্বদা ফাংশন ব্যবহার না করেও আপনি যে কোনও জায়গায় ব্যবহার করতে পারেন । উদাহরণস্বরূপ, পরিবর্তে ....
my_var = 5
print(my_var)
আপনি লিখতে পারেন:
_ = 5
print(_)
তবে এমন একটি কারণ _ছিল যা কিছু xবা এর পরিবর্তে প্যারামিটারের নাম হিসাবে ব্যবহৃত হত input। আমরা এক মুহুর্তে এটি পেয়ে যাব।
প্রথমত, আমাদের জানতে হবে যে ল্যাম্বদা-কীওয়ার্ড একটি ফাংশন গঠন করে, এর মতো def, তবে বিভিন্ন বাক্য গঠন সহ। ল্যাম্বডা ফাংশনের সংজ্ঞা, a = lambda _:Trueলেখার সাথে সমান:
def a(_):
return True
এটি aএকটি ইনপুট প্যারামিটার সহ একটি ফাংশন তৈরি করে _এবং এটি ফিরে আসে True। আন্ডারস্কোরের পরিবর্তে a = lambda x:Trueএকটি সহজেই সহজে লেখা যেতে পারে x। যাইহোক, কনভেনশনটি _যখন আমরা সেই পরিবর্তনশীলটি ব্যবহার করার ইচ্ছা করি না তখন একটি পরিবর্তনশীল নাম হিসাবে ব্যবহার করা হয়। নিম্নোক্ত বিবেচনা কর:
for _ in range(1, 11):
print('pear')
লক্ষ্য করুন যে লুপ সূচকটি কখনই লুপ-বডিটির অভ্যন্তরে ব্যবহৃত হয় না। আমরা কেবল লুপটি একটি নির্দিষ্ট সংখ্যক সময় কার্যকর করতে চাই। যেমনটি winklerrrলিখেছেন, "পরিবর্তনশীল নামটি _[...]" থ্রো-অ্যাও-ভেরিয়েবল "এর মতো, কেবল কোনও স্থানধারক যা কোনও কাজে আসে না।"
তেমনিভাবে, `` a = ল্যাম্বদা এক্স সহ: সত্য যে ফাংশনের শরীরে ইনপুট প্যারামিটার ব্যবহার করা হয় না। ইনপুট আর্গুমেন্টটি আসলে যতক্ষণ না আছে ততক্ষণ তা বিবেচনা করে না। সেই ল্যাম্বডা-ফাংশনের লেখক ভেরিয়েবলটি ব্যবহৃত হবে না তা বোঝাতে এমন _কিছু পরিবর্তে লিখেছিলেন x।
মনে রাখবেন যে, ল্যামডা নেই একটি আর্গুমেন্ট আছে; তাই, লেখা
a(), একটি ত্রুটি উত্থাপন করবে।
আপনি যদি কোনও যুক্তি ছাড়াই একটি ল্যাম্বদা চান তবে এই জাতীয় কিছু লিখুন:
bar = lambda: True
এখন কল করা bar(), কোনও আরগস ছাড়াই ঠিক কাজ করবে। একটি ল্যাম্বদা যা কোনও আর্গুমেন্ট নেয় না সর্বদা একই মান ফেরত দেয় না:
import random
process_fruit = lambda : random.random()
উপরের ল্যাম্বদা ফাংশনটি আরও জটিল যে কেবল এমন কিছু যা সর্বদা একই ধ্রুবককে দেয়।
প্রোগ্রামাররা আমাদের মাঝে মাঝে lambdaপরিবর্তে কীওয়ার্ডের একটি কারণ def হ'ল বিশেষত সংক্ষিপ্ত এবং সহজ functions নোট করুন যে একটি lambdaসংজ্ঞা সাধারণত সমস্ত এক লাইনে মাপসই করে তবে ডিএফ স্টেটমেন্টের সাহায্যে এটি করা বেশ কঠিন। ফাংশনটি আর ব্যবহার করা হবে না তখন এসএফের lambdaপরিবর্তে ব্যবহারের আর একটি কারণ def। যদি আমরা পরে ফাংশনটি আবার কল করতে না চাই, তবে ফাংশনটির একটি নাম দেওয়ার দরকার নেই। উদাহরণস্বরূপ নিম্নলিখিত কোড বিবেচনা করুন:
Def প্রয়োগ_to_each (রূপান্তর, in_container): আইডিএক্সের জন্য আউট_কন্টেইনার = তালিকা (), আইটেম গণনা (ধারক, 0): আউট_কন্টেইনার [আইডিএক্স] = রূপান্তর (আইটেম) আউট_ কনটেনার
এখন আমরা নিম্নলিখিত কল করতে:
squares = apply_to_each(lambda x: x**2 range(0, 101))
লক্ষ্য করুন যে lambda x: x**2একটি লেবেল দেওয়া হয়নি। এটি কারণ সম্ভবত আমরা পরে এটি আবার কল করব না, এটি কেবল সাময়িকভাবে প্রয়োজন আমাদের ছোট এবং সাধারণ কিছু।
লাম্বদা ফাংশনগুলির একটি নাম দেওয়ার প্রয়োজন নেই এই বিষয়টি বর্ণনা করার জন্য অন্য নামের উত্স: "বেনামে ফাংশন" "
এছাড়াও লক্ষ করুন যে ল্যাম্বদা-বিবৃতিগুলি কোনও ফাংশন-কলের মতো যা তারা তাদের তৈরি ফাংশনের একটি রেফারেন্স দেয়। নিম্নলিখিতটি অবৈধ:
apply_to_each(def foo(x): x**2 , range(0, 101))
যদিও, apply_to_each(lambda x: x**2 range(0, 101))ঠিক আছে।
সুতরাং, আমরা ব্যবহার lambdaপরিবর্তে defএবং _একটি দীর্ঘ পরিবর্তনশীল নামের পরিবর্তে যখন আমরা কিছু ছোট, মিষ্টি চান এবং সম্ভবত পরে আবার ব্যবহার না চান।
lambda : True