Python Lambda Functions: शुरुआती लोगों के लिए मार्गदर्शिका
Python lambda functions, उनके उद्देश्य, और कब उपयोग करें—इनके बारे में जानें। प्रभावी कार्यान्वयन के लिए व्यावहारिक उदाहरण और सर्वोत्तम प्रथाएँ शामिल हैं।
Python में lambda functions छोटे, बेनाम (anonymous) फ़ंक्शंस तुरंत बनाने के लिए शक्तिशाली और संक्षिप्त उपकरण हैं। ये अल्पकालिक कार्यों को सरल बनाने, map, filter या sorted जैसे higher-order functions के साथ कोड को सुव्यवस्थित करने, और अस्थायी या एकबारगी लॉजिक परिभाषित करते समय अव्यवस्था घटाने के लिए उपयुक्त हैं। सरल परिदृश्यों में ये कोड की पठनीयता बेहतर करने का एक सुंदर उपाय भी देते हैं। इस लेख में हम देखेंगे कि lambda functions क्या हैं, उनकी विशेषताएँ क्या हैं, और उन्हें प्रभावी ढंग से कैसे उपयोग करें।
इस गाइड में, हम Python में lambda functions की यांत्रिकी, सिंटैक्स, और मानक फ़ंक्शंस की तुलना के साथ उनका पूर्ण विवरण देंगे, तथा मुख्य अवधारणाओं को समझाने के लिए सरल उदाहरण देंगे। हम सामान्य उपयोग मामलों का अन्वेषण करेंगे, जैसे कि कार्यात्मक प्रोग्रामिंग प्रतिमानों में lambda functions का उपयोग और मानक फ़ंक्शंस की तुलना में उनकी दक्षता। व्यावहारिक उदाहरण और सर्वोत्तम प्रथाएँ शामिल हैं ताकि आप उन्हें अपने Python programming में प्रभावी रूप से शामिल कर सकें।
Python में Lambda Function क्या है?
Lambda functions कई प्रमुख तरीकों से मानक Python फ़ंक्शंस से भिन्न होते हैं। ये anonymous expressions होते हैं, अर्थात इनका कोई नाम नहीं होता जब तक कि इन्हें स्पष्ट रूप से किसी वेरिएबल को असाइन न किया जाए। ये अधिक संक्षिप्त होते हैं और एक ही पंक्ति में परिभाषित होते हैं, जहाँ return स्टेटमेंट की आवश्यकता नहीं होती। यह उन्हें सरल, एकबारगी ऑपरेशंस और map, filter तथा sorted जैसे higher-order functions में इनलाइन आर्ग्युमेंट्स के रूप में उपयोग के लिए आदर्श बनाता है।
यहाँ दो संख्याएँ जोड़ने वाली एक lambda function का उदाहरण है:
fn =lambda x, y: x + y
print(fn)# <function <lambda> at 0xe508b8>संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
lambda कीवर्ड इंगित करता है कि हम एक lambda function परिभाषित कर रहे हैं, जिससे def कीवर्ड की आवश्यकता समाप्त हो जाती है। इस lambda कीवर्ड के बाद इनपुट आर्ग्युमेंट्स x और y सूचीबद्ध होते हैं। कॉलन के बाद वह expression दिया जाता है जिसका परिणाम लौटाया जाएगा, यानी x + y।
Python में Lambda Functions लिखना: उदाहरण
अब तक जिन अवधारणाओं पर चर्चा हुई है, उन्हें समझने में सहायता के लिए, आइए देखते हैं कि Python में Lambda functions कैसे काम करती हैं।
Lambda functions लिखने की चरण-दर-चरण मार्गदर्शिका
Lambda functions अतिरिक्त जटिलता के बिना छोटे, सीधे-सादे फ़ंक्शंस बनाने के लिए आदर्श हैं।
उदाहरण के लिए, मान लीजिए आप जाँचना चाहते हैं कि दिया गया गैर-शून्य पूर्णांक सम है या नहीं। आप एक मानक Python फ़ंक्शन लिख सकते हैं, लेकिन वही कार्य एक संक्षिप्त one-liner lambda function से किया जा सकता है जिसे किसी वेरिएबल को असाइन किया गया हो: is_even = lambda x: x % 2 == 0.
यहाँ, असाइनमेंट के दाहिने भाग में दी गई lambda function इनपुट x लेती है और x सम होने पर True लौटाती है (अर्थात 2 से भाग देने पर शेष 0 हो)।
फिर इस lambda function को is_even वेरिएबल को असाइन कर दिया जाता है, जिससे इसे सामान्य फ़ंक्शन की तरह कॉल किया जा सकता है। उदाहरण के लिए, is_even(5) (False लौटाता है) और is_even(678432) (True लौटाता है)।
Lambda functions सरल सूत्र परिभाषित करने के लिए भी उपयुक्त हैं। उदाहरण के लिए, सेल्सियस को फ़ॉरेनहाइट में बदलने के लिए आप lambda function का उपयोग कर सकते हैं: c_to_f = lambda c: (c * 9/5) + 32. फिर आप इस फ़ंक्शन को किसी भी अन्य फ़ंक्शन की तरह कॉल करें: c_to_f(0)।
Lambda functions के सामान्य उपयोग
Lambda functions का उपयोग प्रायः functional programming में होता है, विशेष रूप से map() और filter() जैसी फ़ंक्शंस के साथ, जो किसी कलेक्शन के तत्त्वों को प्रोसेस करने के लिए अन्य फ़ंक्शंस को आर्ग्युमेंट के रूप में लेती हैं। आइए देखें कि filter() के साथ lambda function कैसे उपयोग करें। यह रहा एक कोड स्निपेट:
# Use filter with lambda function
numbers =[1,2,3,4,5,6,7,8]
evens =filter(lambda x: x %2==0, numbers)print(list(evens))# print the list of the filter object to see the result# [2, 4, 6, 8]संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
इस कोड में, हम पहले numbers का एक सेट परिभाषित करते हैं। इसके बाद हम एक lambda function बनाते हैं जो जाँचती है कि कोई संख्या सम है या नहीं। filter फ़ंक्शन इस lambda function को numbers सेट पर लागू करता है। फिर हम filter फ़ंक्शन द्वारा पहचानी गई सम संख्याओं की सूची प्रिंट करते हैं।
इसी तरह, हम map फ़ंक्शन का उपयोग किसी कलेक्शन के तत्त्वों पर lambda लागू करने के लिए कर सकते हैं। नीचे के उदाहरण में, हम सूची में स्ट्रिंग्स की लंबाई निकालते हैं, जहाँ len() फ़ंक्शन को प्रत्येक तत्त्व पर मैप किया जाता है।
# Use map with lambda function
fruits =['apple','banana','cherry']
lengths =list(map(lambda x:len(x), fruits))print(lengths)# [5, 6, 6]संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
Lambda function का उपयोग sorted() फ़ंक्शन के साथ भी होता है, जो किसी कलेक्शन के तत्त्वों को सॉर्ट करके एक नई कलेक्शन लौटाता है। निम्न उदाहरण (बिना lambda के) में, हम sorted() से संख्याओं की सूची को सॉर्ट करते हैं।
मान लीजिए हम संख्याओं की सूची को उनके परिमाण (absolute value) के अनुसार सॉर्ट करना चाहते हैं। इसे कैसे करेंगे? sorted() फ़ंक्शन में एक key आर्ग्युमेंट होता है जो lambda function देकर सॉर्टिंग क्रम अनुकूलित करने की सुविधा देता है।
# Sort according to absolute value
sorted_numbers_absolute =sorted(numbers, key=lambda x:abs(x))print(sorted_numbers_absolute)# [1, -1, 3, 5, 10, -10]संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
sort() के साथ lambda function का एक और उपयोग मामला यह है कि किसी ट्यूपल्स की सूची को किसी विशिष्ट तत्त्व, मान लीजिए दूसरे तत्त्व, के आधार पर सॉर्ट किया जाए।
# Sort a list of tuples by the second element
data =[(1,3),(2,1),(4,2)]
sorted_data =sorted(data, key=lambda x: x[1])print(sorted_data)# [(2, 1), (4, 2), (1, 3)]संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
इस कोड स्निपेट में, हम data को ट्यूपल्स की एक सूची के रूप में परिभाषित करते हैं। फिर हम sorted() फ़ंक्शन को key पैरामीटर के साथ उपयोग करते हैं, जहाँ lambda function प्रत्येक ट्यूपल के दूसरे तत्त्व को सॉर्टिंग के लिए निकालती है।
क्या Python में Lambda Functions तेज़ होती हैं?
Python में, lambda functions स्वभावतः मानक फ़ंक्शंस से तेज़ नहीं होतीं, क्योंकि दोनों समान बाइटकोड में कम्पाइल होते हैं। हालाँकि, कुछ मामलों में जहाँ पूर्ण फ़ंक्शन परिभाषित करने से अनावश्यक बोइलरप्लेट जुड़ता, वहाँ ये थोड़ी-सी ओवरहेड कम कर सकती हैं।
यहाँ कुछ परीक्षण मामले हैं जो lambda functions की मानक Python फ़ंक्शंस से तुलना करते हैं। यह कोड मेरे लैपटॉप पर चलाया गया: MacBook Pro, Apple M1 Pro चिप, 16 GB मेमोरी, macOS Sequoia 15.2।
Lambda functions को map(), filter() या sorted() जैसी higher-order functions को सीधे पास करते समय inline, anonymous functions के रूप में उपयोग किया जा सकता है। इससे अलग से नामित फ़ंक्शन परिभाषित और संदर्भित करने की ज़रूरत नहीं रहती, जिससे बोइलरप्लेट और लुकअप ओवरहेड दोनों घटते हैं।
import time
numbers =list(range(1,1000000))# Standard functiondefdouble_standard(x):return x *2
start = time.time()map(double_standard, numbers)print(time.time()- start)# Lambda function
double_lambda =map(lambda x: x *2, numbers)
start = time.time()list(map(lambda x: x *2, numbers))print(time.time()- start)# 3.504753112792969e-05# 2.384185791015625e-05संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
Lambda functions एकबारगी या अस्थायी उपयोग के लिए आदर्श हैं, क्योंकि ये औपचारिक def ब्लॉक की आवश्यकता समाप्त कर देती हैं, जिससे समय और स्थान दोनों बचते हैं। निम्न कोड ब्लॉक में, हम मानक फ़ंक्शन की प्रदर्शन तुलना एक lambda function से करते हैं। हम एक मिलियन तत्त्वों वाली डिक्शनरी को सॉर्ट करते हैं, जहाँ keys यादृच्छिक दो-अक्षरीय कोड हैं और values यादृच्छिक पूर्णांक हैं।
import random
import string
# Generate a dictionary with elements of the form 'XX': number.
NUMBER_ITEMS =1000000
items ={''.join(random.choices(string.ascii_uppercase, k=2)): random.randint(1,100)for _ inrange(NUMBER_ITEMS)}# Standard function (extra definition step)defsort_standard(item):return item[1]print('Standard')
start = time.time()
sorted_items_standard =sorted(items, key=sort_standard)print(time.time()- start)print(sorted_items_standard[:5])print()# Lambda functionprint('Lambda')
start = time.time()
sorted_items_lambda =sorted(items, key=lambda x: x[1])print(time.time()- start)print(sorted_items_lambda[:5])print()# Standard# 0.00011610984802246094# ['OA', 'VA', 'XA', 'IA', 'BA']# Lambda# 0.00011014938354492188# ['OA', 'VA', 'XA', 'IA', 'BA']संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
आइए कुछ और व्यावहारिक उदाहरणों के माध्यम से देखते हैं कि Python में Lambda functions कैसे काम करती हैं।
व्यावहारिक उदाहरण
Lambda functions का उपयोग अक्सर अंतर्निहित Python मेथड्स के साथ होता है। उदाहरण के लिए, आइए reduce() का उपयोग देखें जो किसी उपयोगकर्ता-परिभाषित बाइनरी फ़ंक्शन को किसी अनुक्रम के तत्त्वों पर संचयी रूप से लागू करता है।
# Example: Use lambda function with built-in Python method reduce.from functools importreduce
numbers =[5,-6,2,7]
total =reduce(lambda x, y: x + y, numbers)print(f'The sum of the numbers is {total}.')# The sum of the numbers is 8.संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
ऊपर दिए filter() या map() की तरह ही, reduce() किसी फ़ंक्शन—यहाँ lambda—को तत्त्वों के समूह पर लागू करता है।
अब एक और अंतर्निहित Python फ़ंक्शन, zip(), देखते हैं। zip कई सूचियों के अनुरूप तत्त्वों को ट्यूपल्स में जोड़ देता है। उदाहरण के लिए, zip(['a', 'b', 'c'], [1, 2, 3]) का परिणाम [('a', 1), ('b', 2), ('c', 3)] होता है।
# Example: Use lambda function with built-in Python method zip.
list1 =[1,2,3]
list2 =[4,5,6]# Using zip and a lambda function to multiply corresponding elements
result =list(map(lambda x: x[0]* x[1],zip(list1, list2)))print(f'The result of multiplying corresponding elements is {result}.')# The result of multiplying corresponding elements is [4, 10, 18].संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
यह कोड दो सूचियों list1 और list2 के अनुरूप तत्त्वों का गुणनफल निकालता है। यह zip() का उपयोग करके सूचियों के तत्त्वों को ट्यूपल्स में जोड़ता है, फिर map() के साथ lambda function लागू कर उन युग्मों का गुणा करता है, और अंत में परिणाम को सूची में बदल देता है।
वास्तविक दुनिया का उदाहरण: डेटा रूपांतरण
मान लीजिए आप एक फल स्टॉल चलाते हैं और हर फल के लिए कुल बिक्री राशि निकालना चाहते हैं।
पहले, हम कुछ बिक्री रिकॉर्ड बनाते हैं। फिर, हम map() को lambda function के साथ उपयोग कर sales_data डिक्शनरी में प्रत्येक आइटम के लिए मूल्य और मात्रा का गुणा करके total_sales निकालते हैं। **record सिंटैक्स मूल डिक्शनरी को अनपैक करता है, जिससे उसकी सभी keys और values नई डिक्शनरी में सुरक्षित रहें। अंत में, हम परिवर्तित डेटा के प्रत्येक रिकॉर्ड को प्रिंट करते हैं।
# Sample data: list of dictionaries representing sales records
sales_data =[{'fruit':'peaches','price':1.41,'quantity':3},{'fruit':'pears','price':1.21,'quantity':2},{'fruit':'mangoes','price':0.56,'quantity':3},]# Using a lambda function to calculate total sales for each record
transformed_data =list(map(lambda entry:{**entry,'total_sales':round(entry['price']* entry['quantity'],2)},
sales_data
))# Print the transformed datafor record in transformed_data:print(record)# {'fruit': 'peaches', 'price': 1.41, 'quantity': 3, 'total_sales': 4.23}# {'fruit': 'pears', 'price': 1.21, 'quantity': 2, 'total_sales': 2.42}# {'fruit': 'mangoes', 'price': 0.56, 'quantity': 3, 'total_sales': 1.68}संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
उपयोगकर्ताओं के लिए lambda functions से हल करने हेतु सरल समस्याएँ
यदि आप lambda functions का अभ्यास करना चाहते हैं, तो ये समस्याएँ आज़माएँ।
दी गई संख्या का वर्ग निकालें।
दो संख्याएँ दी हों, तो बड़ी संख्या ज्ञात करें।
दी गई संख्या विषम है या नहीं, जाँचें।
धनात्मक पूर्णांकों की सूची में से सभी विषम संख्याएँ फ़िल्टर कर दें।
3-तत्त्वीय ट्यूपल्स की सूची को उनके तीसरे तत्त्व के आधार पर सॉर्ट करें।
ईमेल पते से डोमेन निकालें। उदाहरण के लिए, [email protected] से example.com निकालें।
Lambda से जुड़ी सामान्य गलतियाँ
आइए देखते हैं कि प्रोग्रामर lambdas के साथ कौन-सी सामान्य गलतियाँ करते हैं और उनके समाधान।
1. पहली गलती है lambda function का अनुचित जगह उपयोग। याद रखें कि lambda functions छोटे, सरल कार्यों के लिए बनी हैं, जटिल लॉजिक संभालने के लिए नहीं। उदाहरण के लिए, निम्न कोड स्निपेट lambda function के लिए आदर्श उपयोग नहीं है।
# Complex logic in a lambda
result =lambda x:(x **2+ x -1)/(x +1if x !=-1else1)print(result(5))# Hard to understand# 4.833333333333333संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
2. एक और सामान्य गलती है सिंटैक्स को उलझा देना। उदाहरण के लिए, lambda कीवर्ड भूल जाना त्रुटि देगा। एक और आम सिंटैक्स गलती है इनपुट आर्ग्युमेंट(s) छोड़ देना:
# Forgetting the required arguments
numbers =[1,2,3,4]
squared =map(lambda: x **2, numbers)# <-- Where is the input argument? Error: lambda missing argumentसंचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
3. एक और गलती है किनारी (edge) मामलों के लिए लॉजिक शामिल न करना। उदाहरण के लिए, यह कोड तब विफल होता है जब y शून्य हो। समाधान है एक साधारण if स्टेटमेंट जोड़कर समस्या वाले मामले को पकड़ना, या कोड को exception ब्लॉक में लपेटना।
# Dividing without handling zero
divide =lambda x, y: x / y
safe_divide =lambda x, y: x / y if y !=0else"undefined"print(safe_divide(5,0))# undefinedसंचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
4. एक और सूक्ष्म समस्या है परिणाम आउटपुट करते समय iterator को सूची में बदलना भूल जाना। उदाहरण के लिए, map() एक map ऑब्जेक्ट लौटाता है, सूची नहीं। परिणाम पाने के लिए, map ऑब्जेक्ट को list में बदलें।
# Forgetting to convert to a list
numbers =[1,2,3]
squared =map(lambda x: x **2, numbers)print(squared)# <-- squared is the map, not the result# <map object at 0x106d2b0>print(list(squared))# list(squared) gives the result# [1, 4, 9]संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
तो, हम lambdas को कैसे डिबग करें? यहाँ कुछ संभावनाएँ हैं।
Lambda को तोड़ें। अस्थायी रूप से उसे नामित फ़ंक्शन में बदल दें ताकि डिबग करना आसान हो।
Print स्टेटमेंट्स का उपयोग करें ताकि map() या filter() जैसी higher-order functions में मध्यवर्ती मान दिखाए जा सकें।
एज केस जाँचें। संभावित त्रुटियाँ पकड़ने के लिए चरम, अमान्य, या सीमा मानों पर परीक्षण करें।
मध्यवर्ती चरणों को प्रिंट करने की एक उपयोगी तरकीब है परिणाम के साथ एक ट्यूपल में print स्टेटमेंट शामिल करना। फिर ट्यूपल में स्थिति 1 के तत्त्व को इंडेक्स करके आवश्यक आउटपुट higher-order function को पास किया जा सकता है।
यहाँ एक उदाहरण है:
numbers =[1,2,3,4,5]# Lambda function with print to debug intermediate values
filtered_numbers =filter(lambda x:(print(f'Checking: {x} -> {x >=3}'), x >=3)[1], numbers)# Converting filter object to list to force evaluationprint(list(filtered_numbers))# Checking: 1 -> False# Checking: 2 -> False# Checking: 3 -> True# Checking: 4 -> True# Checking: 5 -> True# [3, 4, 5]संचालित द्वारा
Learn-by-Example एडिटर, प्रवेश के लिए Tab दबाएं। बाहर नेविगेट करने के लिए Escape और फिर Tab या Shift+Tab दबाएं।
इस कोड में, संख्याओं की सूची को फ़िल्टर करते समय मध्यवर्ती चरणों को प्रिंट करने की तरकीब अपनाई गई है। filter की lambda function में एक ट्यूपल शामिल है: पहला तत्त्व print स्टेटमेंट है जो वर्तमान संख्या और शर्त (x >= 3) को लॉग करता है, और दूसरा तत्त्व वही शर्त है।
lambda के अंत में दिया [1] सुनिश्चित करता है कि filter फ़ंक्शन को शर्त (x >= 3) ही लौटाई जाए, जबकि डिबगिंग के लिए print स्टेटमेंट चल सके।
filter ऑब्जेक्ट को सूची में बदलना सभी तत्त्वों के मूल्यांकन को बाध्य करता है, जिससे हर संख्या के लिए print स्टेटमेंट ट्रिगर होते हैं। यह तरीका लॉजिक को डिबग करने में मदद करता है, जबकि फ़िल्टरिंग ऑपरेशन की कार्यक्षमता बनी रहती है।
Lambda Functions उपयोग करने की सर्वोत्तम प्रथाएँ
Lambda functions के लिए सर्वोत्तम प्रथाएँ इस समझ पर आधारित हैं कि उन्हें कब उपयोग करना उचित है और कब उनसे बचना चाहिए।
Lambda functions कब उपयोग करें
छोटा, सरल लॉजिक। संक्षिप्त ऑपरेशंस के लिए आदर्श जहाँ पूर्ण फ़ंक्शन परिभाषा आवश्यक नहीं।
Higher-order functions। map(), filter() या sorted() जैसी higher-order functions के आर्ग्युमेंट के रूप में प्रभावी।
अस्थायी (throwaway) फ़ंक्शंस। जब फ़ंक्शन केवल एक बार चाहिए और def से परिभाषित करना कोड को अनावश्यक रूप से भर देगा।
बेहतर पठनीयता। सरल कार्यों के लिए उपयुक्त जहाँ lambda का उपयोग कोड को कॉम्पैक्ट और आसानी से समझने योग्य रखता है।
Lambda functions कब न उपयोग करें
जटिल या बहु-पंक्ति लॉजिक। Lambdas एक ही expression तक सीमित हैं और जटिल ऑपरेशंस में शीघ्र ही अपठनीय हो सकती हैं।
पुन: प्रयोज्य या नामित फ़ंक्शंस। यदि फ़ंक्शन का पुन: उपयोग होना है या एक वर्णनात्मक नाम लाभ देता है, तो मानक def अधिक उपयुक्त है।
डिबगिंग या प्रलेखन। Lambda functions में docstrings नहीं हो सकतीं और ये नामित फ़ंक्शंस की तुलना में डिबग करना कठिन हो सकता है।
Lambdas का उपयोग करते समय पठनीयता और रखरखाव सुधारने के लिए, इन सर्वोत्तम प्रथाओं का पालन करें:
वर्णनात्मक नामों का उपयोग करें ताकि स्पष्टता बनी रहे।
सरल रखें: Lambda आदर्श रूप से एक पंक्ति में फिट हो और सीधा-सादा लॉजिक दर्शाए।
नेस्टिंग सीमित रखें: आवश्यकता न हो तो अन्य lambdas या जटिल डेटा संरचनाओं के भीतर lambda का उपयोग न करें।
संक्षिप्तता से अधिक पठनीयता को प्राथमिकता दें: यदि lambda का उपयोग पठनीयता घटाता है, तो नामित फ़ंक्शन बेहतर है।
निष्कर्ष
Python lambda functions संक्षिप्त, बेनाम फ़ंक्शंस लिखने के लिए एक शक्तिशाली उपकरण हैं। ये उन स्थितियों में उत्कृष्ट हैं जहाँ छोटे, अस्थायी, या इनलाइन ऑपरेशंस चाहिए होते हैं, विशेषकर map, filter, या sorted जैसे higher-order functions के साथ।
हालाँकि, इनका विवेकपूर्ण उपयोग करना चाहिए, क्योंकि अधिक जटिल लॉजिक के लिए def से परिभाषित मानक फ़ंक्शंस अधिक उपयुक्त होते हैं। उनकी ताकत, सीमाओं, और सर्वोत्तम प्रथाओं को समझकर, आप lambda functions का प्रभावी उपयोग कर स्वच्छ, कुशल, और अनुरक्षणीय Python कोड लिख सकते हैं।
Python फ़ंक्शंस के बारे में और जानने के लिए, DataCamp के संसाधन देखें।
ये अल्पकालिक कार्यों को सरल बनाने, map, filter या sorted जैसे higher-order functions के साथ कोड को सुव्यवस्थित करने, और अस्थायी या एकबारगी लॉजिक परिभाषित करते समय अव्यवस्था घटाने के लिए उपयुक्त हैं।
मुझे lambda functions कब उपयोग करनी चाहिए?⌄
Lambda functions निम्न स्थितियों में उपयुक्त हैं: छोटा, सरल लॉजिक; one-liners; higher-order functions (जैसे map() या filter()) को आर्ग्युमेंट के रूप में; तथा केवल एक बार आवश्यक अस्थायी फ़ंक्शंस।
मुझे lambda functions से कब बचना चाहिए?⌄
जटिल लॉजिक या ऐसे फ़ंक्शंस जिनमें प्रलेखन (जैसे docstrings) आवश्यक हो, के लिए lambda functions सर्वोत्तम विकल्प नहीं हैं।
मार्क पेडिगो, PhD, स्वास्थ्यसेवा डेटा विज्ञान, प्रोग्रामिंग और शिक्षा में विशेषज्ञता वाले एक प्रतिष्ठित डेटा वैज्ञानिक हैं। गणित में PhD, कंप्यूटर साइंस में B.S., और AI में प्रोफेशनल सर्टिफिकेट रखने वाले मार्क तकनीकी ज्ञान को व्यावहारिक समस्या-समाधान से प्रभावी रूप से जोड़ते हैं। उनके करियर में धोखाधड़ी का पता लगाने, शिशु मृत्यु दर की भविष्यवाणी, और वित्तीय पूर्वानुमान से जुड़ी भूमिकाएँ शामिल रही हैं, साथ ही NASA के लागत आकलन सॉफ़्टवेयर में उनके योगदान भी हैं। एक शिक्षक के रूप में, उन्होंने DataCamp और वॉशिंगटन यूनिवर्सिटी इन सेंट लुईस में पढ़ाया है और कनिष्ठ प्रोग्रामरों का मार्गदर्शन किया है। खाली समय में, मार्क अपनी पत्नी मैंडी और कुत्ते हार्ले के साथ मिनेसोटा की प्राकृतिक सुंदरता का आनंद लेते हैं और जैज़ पियानो बजाते हैं।
Python में lambda functions छोटे, बेनाम (anonymous) फ़ंक्शंस तुरंत बनाने के लिए शक्तिशाली और संक्षिप्त उपकरण हैं। ये अल्पकालिक कार्यों को सरल बनाने,
map,filterयाsortedजैसे higher-order functions के साथ कोड को सुव्यवस्थित करने, और अस्थायी या एकबारगी लॉजिक परिभाषित करते समय अव्यवस्था घटाने के लिए उपयुक्त हैं। सरल परिदृश्यों में ये कोड की पठनीयता बेहतर करने का एक सुंदर उपाय भी देते हैं। इस लेख में हम देखेंगे कि lambda functions क्या हैं, उनकी विशेषताएँ क्या हैं, और उन्हें प्रभावी ढंग से कैसे उपयोग करें।इस गाइड में, हम Python में lambda functions की यांत्रिकी, सिंटैक्स, और मानक फ़ंक्शंस की तुलना के साथ उनका पूर्ण विवरण देंगे, तथा मुख्य अवधारणाओं को समझाने के लिए सरल उदाहरण देंगे। हम सामान्य उपयोग मामलों का अन्वेषण करेंगे, जैसे कि कार्यात्मक प्रोग्रामिंग प्रतिमानों में lambda functions का उपयोग और मानक फ़ंक्शंस की तुलना में उनकी दक्षता। व्यावहारिक उदाहरण और सर्वोत्तम प्रथाएँ शामिल हैं ताकि आप उन्हें अपने Python programming में प्रभावी रूप से शामिल कर सकें।
Python में Lambda Function क्या है?
Lambda functions कई प्रमुख तरीकों से मानक Python फ़ंक्शंस से भिन्न होते हैं। ये anonymous expressions होते हैं, अर्थात इनका कोई नाम नहीं होता जब तक कि इन्हें स्पष्ट रूप से किसी वेरिएबल को असाइन न किया जाए। ये अधिक संक्षिप्त होते हैं और एक ही पंक्ति में परिभाषित होते हैं, जहाँ
returnस्टेटमेंट की आवश्यकता नहीं होती। यह उन्हें सरल, एकबारगी ऑपरेशंस औरmap,filterतथाsortedजैसे higher-order functions में इनलाइन आर्ग्युमेंट्स के रूप में उपयोग के लिए आदर्श बनाता है।यहाँ दो संख्याएँ जोड़ने वाली एक lambda function का उदाहरण है:
Lambda functions कैसे काम करती हैं
यह lambda function कैसे काम करती है? इसे समझने के लिए, इसे एक मानक Python फ़ंक्शन से तुलना करते हैं।
यह मानक फ़ंक्शन सरल है।
defकीवर्ड फ़ंक्शन को परिभाषित करता है, जो दो आर्ग्युमेंट्सxऔरyलेता है। यहxऔरyका योग निकालकर परिणाम लौटाता है।अब देखते हैं कि हमारी lambda function यही कार्य कैसे करती है।
lambdaकीवर्ड इंगित करता है कि हम एक lambda function परिभाषित कर रहे हैं, जिससेdefकीवर्ड की आवश्यकता समाप्त हो जाती है। इसlambdaकीवर्ड के बाद इनपुट आर्ग्युमेंट्सxऔरyसूचीबद्ध होते हैं। कॉलन के बाद वह expression दिया जाता है जिसका परिणाम लौटाया जाएगा, यानीx + y।Python में Lambda Functions लिखना: उदाहरण
अब तक जिन अवधारणाओं पर चर्चा हुई है, उन्हें समझने में सहायता के लिए, आइए देखते हैं कि Python में Lambda functions कैसे काम करती हैं।
Lambda functions लिखने की चरण-दर-चरण मार्गदर्शिका
Lambda functions अतिरिक्त जटिलता के बिना छोटे, सीधे-सादे फ़ंक्शंस बनाने के लिए आदर्श हैं।
उदाहरण के लिए, मान लीजिए आप जाँचना चाहते हैं कि दिया गया गैर-शून्य पूर्णांक सम है या नहीं। आप एक मानक Python फ़ंक्शन लिख सकते हैं, लेकिन वही कार्य एक संक्षिप्त one-liner lambda function से किया जा सकता है जिसे किसी वेरिएबल को असाइन किया गया हो:
is_even = lambda x: x % 2 == 0.यहाँ, असाइनमेंट के दाहिने भाग में दी गई lambda function इनपुट
xलेती है औरxसम होने परTrueलौटाती है (अर्थात 2 से भाग देने पर शेष 0 हो)।फिर इस lambda function को
is_evenवेरिएबल को असाइन कर दिया जाता है, जिससे इसे सामान्य फ़ंक्शन की तरह कॉल किया जा सकता है। उदाहरण के लिए,is_even(5)(Falseलौटाता है) औरis_even(678432)(Trueलौटाता है)।Lambda functions सरल सूत्र परिभाषित करने के लिए भी उपयुक्त हैं। उदाहरण के लिए, सेल्सियस को फ़ॉरेनहाइट में बदलने के लिए आप lambda function का उपयोग कर सकते हैं:
c_to_f = lambda c: (c * 9/5) + 32. फिर आप इस फ़ंक्शन को किसी भी अन्य फ़ंक्शन की तरह कॉल करें:c_to_f(0)।Lambda functions के सामान्य उपयोग
Lambda functions का उपयोग प्रायः functional programming में होता है, विशेष रूप से
map()औरfilter()जैसी फ़ंक्शंस के साथ, जो किसी कलेक्शन के तत्त्वों को प्रोसेस करने के लिए अन्य फ़ंक्शंस को आर्ग्युमेंट के रूप में लेती हैं। आइए देखें किfilter()के साथ lambda function कैसे उपयोग करें। यह रहा एक कोड स्निपेट:इस कोड में, हम पहले
numbersका एक सेट परिभाषित करते हैं। इसके बाद हम एक lambda function बनाते हैं जो जाँचती है कि कोई संख्या सम है या नहीं।filterफ़ंक्शन इस lambda function कोnumbersसेट पर लागू करता है। फिर हमfilterफ़ंक्शन द्वारा पहचानी गई सम संख्याओं की सूची प्रिंट करते हैं।इसी तरह, हम
mapफ़ंक्शन का उपयोग किसी कलेक्शन के तत्त्वों पर lambda लागू करने के लिए कर सकते हैं। नीचे के उदाहरण में, हम सूची में स्ट्रिंग्स की लंबाई निकालते हैं, जहाँlen()फ़ंक्शन को प्रत्येक तत्त्व पर मैप किया जाता है।Lambda function का उपयोग
sorted()फ़ंक्शन के साथ भी होता है, जो किसी कलेक्शन के तत्त्वों को सॉर्ट करके एक नई कलेक्शन लौटाता है। निम्न उदाहरण (बिना lambda के) में, हमsorted()से संख्याओं की सूची को सॉर्ट करते हैं।मान लीजिए हम संख्याओं की सूची को उनके परिमाण (absolute value) के अनुसार सॉर्ट करना चाहते हैं। इसे कैसे करेंगे?
sorted()फ़ंक्शन में एकkeyआर्ग्युमेंट होता है जो lambda function देकर सॉर्टिंग क्रम अनुकूलित करने की सुविधा देता है।sort()के साथlambdafunction का एक और उपयोग मामला यह है कि किसी ट्यूपल्स की सूची को किसी विशिष्ट तत्त्व, मान लीजिए दूसरे तत्त्व, के आधार पर सॉर्ट किया जाए।इस कोड स्निपेट में, हम
dataको ट्यूपल्स की एक सूची के रूप में परिभाषित करते हैं। फिर हमsorted()फ़ंक्शन कोkeyपैरामीटर के साथ उपयोग करते हैं, जहाँ lambda function प्रत्येक ट्यूपल के दूसरे तत्त्व को सॉर्टिंग के लिए निकालती है।क्या Python में Lambda Functions तेज़ होती हैं?
Python में, lambda functions स्वभावतः मानक फ़ंक्शंस से तेज़ नहीं होतीं, क्योंकि दोनों समान बाइटकोड में कम्पाइल होते हैं। हालाँकि, कुछ मामलों में जहाँ पूर्ण फ़ंक्शन परिभाषित करने से अनावश्यक बोइलरप्लेट जुड़ता, वहाँ ये थोड़ी-सी ओवरहेड कम कर सकती हैं।
यहाँ कुछ परीक्षण मामले हैं जो lambda functions की मानक Python फ़ंक्शंस से तुलना करते हैं। यह कोड मेरे लैपटॉप पर चलाया गया: MacBook Pro, Apple M1 Pro चिप, 16 GB मेमोरी, macOS Sequoia 15.2।
Lambda functions को
map(),filter()याsorted()जैसी higher-order functions को सीधे पास करते समय inline, anonymous functions के रूप में उपयोग किया जा सकता है। इससे अलग से नामित फ़ंक्शन परिभाषित और संदर्भित करने की ज़रूरत नहीं रहती, जिससे बोइलरप्लेट और लुकअप ओवरहेड दोनों घटते हैं।Lambda functions एकबारगी या अस्थायी उपयोग के लिए आदर्श हैं, क्योंकि ये औपचारिक
defब्लॉक की आवश्यकता समाप्त कर देती हैं, जिससे समय और स्थान दोनों बचते हैं। निम्न कोड ब्लॉक में, हम मानक फ़ंक्शन की प्रदर्शन तुलना एक lambda function से करते हैं। हम एक मिलियन तत्त्वों वाली डिक्शनरी को सॉर्ट करते हैं, जहाँ keys यादृच्छिक दो-अक्षरीय कोड हैं और values यादृच्छिक पूर्णांक हैं।Python Lambda Functions: उदाहरण और अभ्यास
आइए कुछ और व्यावहारिक उदाहरणों के माध्यम से देखते हैं कि Python में Lambda functions कैसे काम करती हैं।
व्यावहारिक उदाहरण
Lambda functions का उपयोग अक्सर अंतर्निहित Python मेथड्स के साथ होता है। उदाहरण के लिए, आइए
reduce()का उपयोग देखें जो किसी उपयोगकर्ता-परिभाषित बाइनरी फ़ंक्शन को किसी अनुक्रम के तत्त्वों पर संचयी रूप से लागू करता है।ऊपर दिए
filter()याmap()की तरह ही,reduce()किसी फ़ंक्शन—यहाँ lambda—को तत्त्वों के समूह पर लागू करता है।अब एक और अंतर्निहित Python फ़ंक्शन,
zip(), देखते हैं।zipकई सूचियों के अनुरूप तत्त्वों को ट्यूपल्स में जोड़ देता है। उदाहरण के लिए,zip(['a', 'b', 'c'], [1, 2, 3])का परिणाम[('a', 1), ('b', 2), ('c', 3)]होता है।यह कोड दो सूचियों
list1औरlist2के अनुरूप तत्त्वों का गुणनफल निकालता है। यहzip()का उपयोग करके सूचियों के तत्त्वों को ट्यूपल्स में जोड़ता है, फिरmap()के साथ lambda function लागू कर उन युग्मों का गुणा करता है, और अंत में परिणाम को सूची में बदल देता है।वास्तविक दुनिया का उदाहरण: डेटा रूपांतरण
मान लीजिए आप एक फल स्टॉल चलाते हैं और हर फल के लिए कुल बिक्री राशि निकालना चाहते हैं।
पहले, हम कुछ बिक्री रिकॉर्ड बनाते हैं। फिर, हम
map()को lambda function के साथ उपयोग करsales_dataडिक्शनरी में प्रत्येक आइटम के लिए मूल्य और मात्रा का गुणा करकेtotal_salesनिकालते हैं।**recordसिंटैक्स मूल डिक्शनरी को अनपैक करता है, जिससे उसकी सभी keys और values नई डिक्शनरी में सुरक्षित रहें। अंत में, हम परिवर्तित डेटा के प्रत्येक रिकॉर्ड को प्रिंट करते हैं।उपयोगकर्ताओं के लिए lambda functions से हल करने हेतु सरल समस्याएँ
यदि आप lambda functions का अभ्यास करना चाहते हैं, तो ये समस्याएँ आज़माएँ।
[email protected]सेexample.comनिकालें।Lambda से जुड़ी सामान्य गलतियाँ
आइए देखते हैं कि प्रोग्रामर lambdas के साथ कौन-सी सामान्य गलतियाँ करते हैं और उनके समाधान।
1. पहली गलती है lambda function का अनुचित जगह उपयोग। याद रखें कि lambda functions छोटे, सरल कार्यों के लिए बनी हैं, जटिल लॉजिक संभालने के लिए नहीं। उदाहरण के लिए, निम्न कोड स्निपेट lambda function के लिए आदर्श उपयोग नहीं है।
ऐसे मामले में, मानक Python फ़ंक्शन उपयोग करना बेहतर है।
2. एक और सामान्य गलती है सिंटैक्स को उलझा देना। उदाहरण के लिए,
lambdaकीवर्ड भूल जाना त्रुटि देगा। एक और आम सिंटैक्स गलती है इनपुट आर्ग्युमेंट(s) छोड़ देना:समाधान है इनपुट आर्ग्युमेंट शामिल करना:
ऐसी गलतियाँ पकड़ने का एक अच्छा तरीका है विकास के दौरान अनौपचारिक, सरल टेस्ट केस शामिल करना।
3. एक और गलती है किनारी (edge) मामलों के लिए लॉजिक शामिल न करना। उदाहरण के लिए, यह कोड तब विफल होता है जब
yशून्य हो। समाधान है एक साधारणifस्टेटमेंट जोड़कर समस्या वाले मामले को पकड़ना, या कोड को exception ब्लॉक में लपेटना।4. एक और सूक्ष्म समस्या है परिणाम आउटपुट करते समय iterator को सूची में बदलना भूल जाना। उदाहरण के लिए,
map()एकmapऑब्जेक्ट लौटाता है, सूची नहीं। परिणाम पाने के लिए,mapऑब्जेक्ट कोlistमें बदलें।Python Lambda Debugging रणनीतियाँ
तो, हम lambdas को कैसे डिबग करें? यहाँ कुछ संभावनाएँ हैं।
map()याfilter()जैसी higher-order functions में मध्यवर्ती मान दिखाए जा सकें।मध्यवर्ती चरणों को प्रिंट करने की एक उपयोगी तरकीब है परिणाम के साथ एक ट्यूपल में
printस्टेटमेंट शामिल करना। फिर ट्यूपल में स्थिति 1 के तत्त्व को इंडेक्स करके आवश्यक आउटपुट higher-order function को पास किया जा सकता है।यहाँ एक उदाहरण है:
इस कोड में, संख्याओं की सूची को फ़िल्टर करते समय मध्यवर्ती चरणों को प्रिंट करने की तरकीब अपनाई गई है।
filterकी lambda function में एक ट्यूपल शामिल है: पहला तत्त्वprintस्टेटमेंट है जो वर्तमान संख्या और शर्त (x >= 3) को लॉग करता है, और दूसरा तत्त्व वही शर्त है।lambda के अंत में दिया
[1]सुनिश्चित करता है किfilterफ़ंक्शन को शर्त (x >= 3) ही लौटाई जाए, जबकि डिबगिंग के लिएprintस्टेटमेंट चल सके।filterऑब्जेक्ट को सूची में बदलना सभी तत्त्वों के मूल्यांकन को बाध्य करता है, जिससे हर संख्या के लिएprintस्टेटमेंट ट्रिगर होते हैं। यह तरीका लॉजिक को डिबग करने में मदद करता है, जबकि फ़िल्टरिंग ऑपरेशन की कार्यक्षमता बनी रहती है।Lambda Functions उपयोग करने की सर्वोत्तम प्रथाएँ
Lambda functions के लिए सर्वोत्तम प्रथाएँ इस समझ पर आधारित हैं कि उन्हें कब उपयोग करना उचित है और कब उनसे बचना चाहिए।
Lambda functions कब उपयोग करें
map(),filter()याsorted()जैसी higher-order functions के आर्ग्युमेंट के रूप में प्रभावी।defसे परिभाषित करना कोड को अनावश्यक रूप से भर देगा।Lambda functions कब न उपयोग करें
defअधिक उपयुक्त है।Lambdas का उपयोग करते समय पठनीयता और रखरखाव सुधारने के लिए, इन सर्वोत्तम प्रथाओं का पालन करें:
निष्कर्ष
Python lambda functions संक्षिप्त, बेनाम फ़ंक्शंस लिखने के लिए एक शक्तिशाली उपकरण हैं। ये उन स्थितियों में उत्कृष्ट हैं जहाँ छोटे, अस्थायी, या इनलाइन ऑपरेशंस चाहिए होते हैं, विशेषकर
map,filter, याsortedजैसे higher-order functions के साथ।हालाँकि, इनका विवेकपूर्ण उपयोग करना चाहिए, क्योंकि अधिक जटिल लॉजिक के लिए
defसे परिभाषित मानक फ़ंक्शंस अधिक उपयुक्त होते हैं। उनकी ताकत, सीमाओं, और सर्वोत्तम प्रथाओं को समझकर, आप lambda functions का प्रभावी उपयोग कर स्वच्छ, कुशल, और अनुरक्षणीय Python कोड लिख सकते हैं।Python फ़ंक्शंस के बारे में और जानने के लिए, DataCamp के संसाधन देखें।