Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में पैकिंग और अनपैकिंग तर्क?

यदि आपने अजगर में थोड़ी सी प्रोग्रामिंग की है, तो आपने अजगर कार्यों में "**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 जैसे वेब ढांचे में प्रयुक्त होता है।

  • रैपर फ़ंक्शंस में उपयोग किया जाता है जिसके लिए हमें परिवर्तनीय तर्कों में पारित करने की आवश्यकता होती है।


  1. पायथन में सहसंबंध और प्रतिगमन

    सहसंबंध कुछ सांख्यिकीय संबंधों को संदर्भित करता है जिसमें दो डेटा सेट के बीच निर्भरता शामिल होती है। जबकि रैखिक प्रतिगमन एक आश्रित चर और एक या अधिक स्वतंत्र चर के बीच संबंध स्थापित करने के लिए एक रैखिक दृष्टिकोण है। एक एकल स्वतंत्र चर को रैखिक प्रतिगमन कहा जाता है जबकि कई स्वतंत्र चर को एकाधिक प्रति

  1. पायथन में कमांड लाइन और परिवर्तनीय तर्क?

    कमांड लाइन तर्क कमांड लाइन तर्क इनपुट पैरामीटर हैं जो उपयोगकर्ता को एक निश्चित तरीके से कार्य करने के लिए प्रोग्राम को सक्षम करने की अनुमति देते हैं- अतिरिक्त जानकारी आउटपुट करने के लिए, या किसी निर्दिष्ट स्रोत से डेटा पढ़ने के लिए या वांछित प्रारूप में डेटा की व्याख्या करने के लिए। पायथन कमांड लाइ

  1. पायथन में =+ और +=क्या करते हैं?

    +=ऑपरेटर ऑब्जेक्ट के लिए सिंटैक्टिक शुगर है।__iadd__() फ़ंक्शन। पायथन डॉक्स से: इन विधियों को संवर्धित अंकगणितीय असाइनमेंट को लागू करने के लिए कहा जाता है (+=, -=, *=, @=, /=, //=, %=, **=, =, &=, ^=, |=). इन विधियों को ऑपरेशन को जगह में करने का प्रयास करना चाहिए (स्वयं को संशोधित करना) और परिणाम व