यदि आपने अजगर में थोड़ी सी प्रोग्रामिंग की है, तो आपने अजगर कार्यों में "**args" और "**kwargs" शब्द देखा है। लेकिन वास्तव में वे क्या हैं?
* और ** ऑपरेटरों ने अलग-अलग ऑपरेशन किए जो एक दूसरे के पूरक हैं, इस पर निर्भर करते हुए कि हम उनका उपयोग कहां कर रहे हैं।
तो जब हम उन्हें विधि परिभाषा में उपयोग कर रहे हैं, जैसे -
def __init__(self, *args, **kwargs): pass
उपरोक्त ऑपरेशन को 'पैकिंग' कहा जाता है क्योंकि यह सभी तर्कों को एक एकल चर में पैक करता है जिसे यह विधि कॉल एक टपल में प्राप्त करती है जिसे args कहा जाता है। हम args के अलावा अन्य नाम का उपयोग कर सकते हैं, लेकिन args चीजों को करने का सबसे आम और पाइथोनिक तरीका है। यह समझने के लिए कि एक एकल चर क्यों रखा जाए, नीचे दिए गए उदाहरण पर विचार करें:
आइए मान लें कि हमारे पास एक फ़ंक्शन है जो तीन तर्क लेता है और हमारे पास आकार 3 की एक सूची है जिसमें फ़ंक्शन के लिए सभी तर्क हैं। अब अगर हम केवल फ़ंक्शन को सूची पास करने का प्रयास करते हैं, तो कॉल काम नहीं करता है और एक त्रुटि के माध्यम से।
उदाहरण 1
#function which takes three argument def func(a,b,c): print("{} {} {}".format(a, b, c)) #list of arguments lst = ['python', 'java', 'csharp'] #passing the list func(lst)
परिणाम
TypeError: func() missing 2 required positional arguments: 'b' and 'c'
एक बार जब हमारे पास 'चुना हुआ' चर होता है, तो आप उन चीजों को करते हैं जो सामान्य टपल के साथ संभव नहीं हैं। Args[0], args[1] और args[2] हमें क्रमशः पहला, दूसरा और तीसरा तर्क देंगे। यदि आप args tuple को एक सूची में कनवर्ट करते हैं तो हम इसमें आइटम को संशोधित करने, हटाने और बदलने का कार्य कर सकते हैं।
इन पैक्ड तर्कों को किसी अन्य विधि में पास करने के लिए, हमें अनपैकिंग करने की आवश्यकता है -
def __init__(self, *args, **kwargs): #some code here car(VehicleClass, self).__init__(self, *args, **kwargs) #some code below
फिर से हमारे पास * ऑपरेटर है, लेकिन इस बार यह एक विधि कॉल के संदर्भ में है। अब क्या करना है args सरणी को विस्फोट करना और विधि को कॉल करना जैसे कि प्रत्येक चर स्वतंत्र है। स्पष्ट समझ पाने के लिए नीचे एक और उदाहरण दिया गया है -
उदाहरण 2
def func1(x, y, z): print(x) print(y) print(z) def func2(*args): #Convert args tuple to a list so we can do modification. args = list(args) args[0] = 'HTML' args[1] = 'CSS' args[2] = 'JavaScript' func1(*args) func2('Python', 'Java', 'CSharp')
परिणाम
HTML CSS JavaScript
उपरोक्त आउटपुट से, हम तीनों तर्कों को func1 पर भेजने से पहले बदलने में सक्षम हैं।
इसी तरह हम example1 में पाए गए TypeError संदेश को हल कर सकते हैं।
उदाहरण:1_1
#function which takes three argument def func(a,b,c): print("{} {} {}".format(a, b, c)) #list of arguments lst = ['python', 'java', 'csharp'] #passing the list func(*lst)
परिणाम
python java csharp
इसलिए यदि हमें यह नहीं पता है कि एक पायथन फ़ंक्शन को कितने तर्कों को पारित करने की आवश्यकता है, तो हम सभी तर्कों को एक टपल में पैक करने के लिए पैकिंग का उपयोग कर सकते हैं।
#Below function uses packing to sum unknown number of arguments def Sum(*args): sum = 0 for i in range(0, len(args)): sum = sum + args[i] return sum #Driver code print("Function with 2 arguments & Sum is: \n",Sum(9, 12)) print("Function with 5 arguments & Sum is: \n",Sum(2, 3, 4, 5, 6)) print("Function with 6 arguments & Sum is: \n",Sum(20, 30, 40, 12, 40, 54))
परिणाम
Function with 2 arguments & Sum is: 21 Function with 5 arguments & Sum is: 20 Function with 6 arguments & Sum is: 196
पैकिंग और अनपैकिंग दोनों के उपयोग को प्रदर्शित करने के लिए नीचे एक और कार्यक्रम है:
#function with three arguments def func1(x,y,z): print("Argument One: ",x) print("\nArgument Two: ",y) print("\nArgument Three: ",z) #Packing- All arguments passed to func2 are packed into tuple *args def func2(*args): #To do some modification, we need to convert args tuple to list args = list(args) #Modifying args[0] & args[1] args[0] = 'Hello' args[1] = 'TutorialsPoint' #Unpacking args and calling func1() func1(*args) #Driver code func2("I", "Love", "Coding")
परिणाम
Argument One: Hello Argument Two: TutorialsPoint Argument Three: Coding
शब्दकोशों के लिए ** का प्रयोग करें
# Program to demonstrate unpacking of dictionary items using ** def func(x,y,z): print("Dicionary first item: ",x) print("\nDictionary second item: ",y) print("\nDictionary third item: ",z) d = {'x': 27, 'y': 54, 'z': 81} func(**d)
परिणाम
Dicionary first item: 27 Dictionary second item: 54 Dictionary third item: 81
अनुप्रयोग
-
सॉकेट प्रोग्रामिंग में उपयोग किया जाता है जहां हमें सर्वर को अज्ञात (अनंत) अनुरोधों की संख्या भेजने की आवश्यकता होती है।
-
कार्यों को देखने के लिए परिवर्तनीय तर्क भेजने के लिए django जैसे वेब ढांचे में प्रयुक्त होता है।
-
रैपर फ़ंक्शंस में उपयोग किया जाता है जिसके लिए हमें परिवर्तनीय तर्कों में पारित करने की आवश्यकता होती है।