Python में हमें विशेष चिह्नों के माध्यम से किसी फ़ंक्शन में मनमाने संख्या के आर्ग्युमेंट्स को संभालने का तरीका प्रदान किया जाता है। ये चिह्न * और ** हैं, जिन्हें वेरिएबल के नामों के आगे लगाया जाता है ताकि *args और **kwargs को दर्शाया जा सके। आप *args या **kwargs पैरामीटर्स को कोई भी नाम दे सकते हैं, लेकिन परंपरा से इन्हें args (arguments) और kwargs (keyword arguments) कहा जाता है।
*args का उपयोग बिना कीवर्ड के किसी फ़ंक्शन को मनमाने संख्या के आर्ग्युमेंट्स भेजने के लिए किया जाता है। यहाँ एक उदाहरण है:
def add(*args):
res = 0 # अंतिम परिणाम को 0 से प्रारंभ करें
for num in args: # पास किए गए आर्ग्युमेंट्स की सूची में लूप करें
res += num # प्रत्येक संख्या को योग में जोड़ें
return res
print(add(3, 5, 7, 9)) # 24
इस प्रोग्राम में, args एक टपल है जिसमें हम फ़ंक्शन को जो मान पास करते हैं वे होते हैं। तो, ऊपर के उदाहरण में, args(3, 5, 7, 9) के बराबर है। इस प्रकार हम अपने फ़ंक्शन को कोई भी संख्या के आर्ग्युमेंट्स पास कर सकते हैं।
**kwargs
**kwargs हमें कीवर्ड्स के साथ मनमाने संख्या के आर्ग्युमेंट्स पास करने की अनुमति देता है। दूसरे शब्दों में, हम **kwargs का उपयोग अपने फ़ंक्शन को किसी भी संख्या के कीवर्ड आर्ग्युमेंट्स पास करने के लिए करते हैं। यहाँ एक उदाहरण है:
def introduce(**kwargs):
for key, value in kwargs.items(): # सभी कुंजी-मूल्य जोड़ों के माध्यम से लूप करें
print(f'{key}: {value}') # प्रत्येक कुंजी-मूल्य जोड़ को प्रिंट करें
introduce(Name='Alice', Age=25, Country='USA')
# 'Name: Alice'
# 'Age: 25'
# 'Country: USA'
ऊपर के प्रोग्राम में, kwargs एक डिक्शनरी है जिसमें वे कुंजी-मूल्य जोड़े होते हैं जिन्हें हम फ़ंक्शन को पास करते हैं। तो, इस उदाहरण में, kwargs{'Name': 'Alice', 'Age': 25, 'Country': 'USA'} के बराबर है।
आप *args और **kwargs को फ़ंक्शन कॉल में भी संयोजित कर सकते हैं। *args को **kwargs से पहले आना चाहिए।
def combined_example(*args, **kwargs):
print(args) # आर्ग्युमेंट्स के टपल को प्रिंट करें
print(kwargs) # कीवर्ड आर्ग्युमेंट्स की डिक्शनरी को प्रिंट करें
combined_example(1, 2, 3, Name='Alice', Age=25)
# (1, 2, 3)
# {'Name': 'Alice', 'Age': 25}
इस फ़ंक्शन में, args एक टपल है जिसमें मान (1, 2, 3) हैं और kwargs एक डिक्शनरी है जिसमें मान {'Name': 'Alice', 'Age': 25} हैं।
किसी भी संख्या के आर्ग्युमेंट्स और कीवर्ड आर्ग्युमेंट्स को संभालने की यह लचीलापन वास्तव में उपयोगी हो सकता है जब आप चाहते हैं कि आपके फ़ंक्शन्स अधिक डायनामिक और बहुमुखी हों।
नियमित फ़ंक्शन आर्ग्युमेंट्स के साथ *args और **kwargs को संयोजित करना
*args और **kwargs का उपयोग नियमित फ़ंक्शन आर्ग्युमेंट्स के साथ संयोजन में किया जा सकता है। इन मामलों में, आपको कुछ नियमों को ध्यान में रखना होगा:
फ़ंक्शन परिभाषा में आर्ग्युमेंट्स का सही क्रम होना चाहिए: मानक आर्ग्युमेंट्स, *args, फिर **kwargs।
मानक आर्ग्युमेंट्स (जिन्हें पोज़िशनल आर्ग्युमेंट्स भी कहा जाता है) को हमेशा *args और **kwargs से पहले निर्दिष्ट किया जाना चाहिए।
यहाँ 1 और 2 मानक आर्ग्युमेंट्स हैं जो फ़ंक्शन परिभाषा में a और b से मेल खाते हैं। टपल (3, 4, 5) अतिरिक्त आर्ग्युमेंट्स को दर्शाता है जो args में समूहित होते हैं। शेष कीवर्ड आर्ग्युमेंट्स kwargs में एक डिक्शनरी के रूप में समूहित होते हैं।
जब मानक आर्ग्युमेंट्स के साथ *args और **kwargs का उपयोग करते हैं, तो सुनिश्चित करें कि फ़ंक्शन को कॉल करते समय मानक आर्ग्युमेंट्स को नहीं भूला गया है, क्योंकि इससे TypeError उत्पन्न होगा। उदाहरण के लिए, function_example(1, Name='Alice', Age=25) को बिना b आर्ग्युमेंट का मान दिए कॉल करने से एक त्रुटि होगी।