पायथन में *args और **kwargs फ़ंक्शन डेफिनिशन और कॉल में पैकिंग/अनपैकिंग के लिए उपयोग होते हैं।
पैकिंग (फ़ंक्शन डेफिनिशन में)
कई आर्गुमेंट्स को एक टपल/डिक्शनरी में पैक करना:
def func(*args, **kwargs):
print(args) # टपल
print(kwargs) # डिक्शनरी
func(1, 2, 3, a=4, b=5)
# (1, 2, 3)
# {'a': 4, 'b': 5}
अनपैकिंग (फ़ंक्शन कॉल में)
सीक्वेंस/डिक्शनरी को अलग-अलग आर्गुमेंट्स में खोलना:
def func1(x, y, z):
print(x, y, z)
lst = ['python', 'java', 'csharp']
func1(*lst) # अनपैकिंग: python java csharp
d = {'x': 27, 'y': 54, 'z': 81}
func1(**d) # 27 54 81
व्यावहारिक उदाहरण: आर्गुमेंट्स मॉडिफाई करना
def func1(x, y, z):
print("Argument One:", x)
print("Argument Two:", y)
print("Argument Three:", z)
def func2(*args):
args = list(args) # टपल को लिस्ट में बदलें (मॉडिफाई करने के लिए)
args[0] = 'Hello'
args[1] = 'TutorialsPoint'
func1(*args) # फिर से अनपैक करके कॉल करें
func2("I", "Love", "Coding")
# Argument One: Hello
# Argument Two: TutorialsPoint
# Argument Three: Coding
अनजान संख्या में आर्गुमेंट्स: सम फ़ंक्शन
def Sum(*args):
total = 0
for i in args:
total += i
return total
print(Sum(9, 12)) # 21
print(Sum(2, 3, 4, 5, 6)) # 20
print(Sum(20, 30, 40, 12, 40, 54)) # 196
डिक्शनरी अनपैकिंग **
def func(x, y, z):
print(x, y, z)
d = {'x': 27, 'y': 54, 'z': 81}
func(**d) # 27 54 81
आम उपयोग केस
- व्रैपर फ़ंक्शन्स: डेकोरेटर्स, प्रॉक्सी फ़ंक्शन्स।
- वेब फ्रेमवर्क्स: Django व्यू फ़ंक्शन्स में वेरिएबल आर्गुमेंट्स पास करना।
- सॉकेट प्रोग्रामिंग: वेरिएबल संख्या में रिक्वेस्ट हैंडल करना।
- लाइब्रेरी रैपर्स: मौजूदा फ़ंक्शन्स को डिफ़ॉल्ट आर्गुमेंट्स के साथ अनुकूलित करना।
सिंटैक्स सारांश
| संदर्भ | * (स्टार) | ** (डबल स्टार) |
|---|---|---|
| फ़ंक्शन डेफिनिशन | पोजिशनल आर्गुमेंट्स पैक → टपल | कीवर्ड आर्गुमेंट्स पैक → डिक्शनरी |
| फ़ंक्शन कॉल | सीक्वेंस अनपैक → पोजिशनल आर्गुमेंट्स | डिक्शनरी अनपैक → कीवर्ड आर्गुमेंट्स |