और एक फंक्शन को के तर्कों को स्वीकार करने देते हैं। अतिरिक्त तर्कों को एक tuple में एकत्रित करता है; अतिरिक्त तर्कों को एक dict में एकत्रित करता है। (नाम सम्मेलन हैं — और वह हैं जो महत्वपूर्ण हैं।)
*args**kwargs*args**kwargs***def total(*args): # collects all positional args into a tuple
print(args) # e.g. (1, 2, 3)
return sum(args)
total(1, 2, 3) # 6
total(1, 2, 3, 4, 5) # 15 — any number of args
def configure(**kwargs): # collects keyword args into a dict
print(kwargs) # e.g. {"host": "localhost", "port": 8080}
for key, value in kwargs.items():
print(f"{key} = {value}")
configure(host="localhost", port=8080, debug=True)
def func(a, b, *args, **kwargs):
# a, b → required positional
# args → extra positional (tuple)
# kwargs → extra keyword (dict)
...
func(1, 2, 3, 4, x=5, y=6)
# a=1, b=2, args=(3, 4), kwargs={"x": 5, "y": 6}
आवश्यक क्रम है: नियमित पैरामीटर, फिर *args, फिर **kwargs।
# `*` and `**` also UNPACK collections INTO arguments at the call site
numbers = [1, 2, 3]
total(*numbers) # same as total(1, 2, 3)
settings = {"host": "x", "port": 80}
configure(**settings) # same as configure(host="x", port=80)
यही सिंटैक्स एक list/dict को स्थितिगत/कीवर्ड तर्कों में अनपैक करता है — तर्कों को आगे बढ़ाने के लिए उपयोगी।
def wrapper(*args, **kwargs):
# accept ANY arguments and pass them through unchanged
return original_func(*args, **kwargs)
यह पास-थ्रू पैटर्न है कि कैसे डेकोरेटर और रैपर फंक्शन किसी भी फंक्शन सिग्नेचर को हैंडल करते हैं।
*args/**kwargs लचकदार फंक्शन सिग्नेचर को सक्षम करते हैं जो तर्कों की कोई भी संख्या स्वीकार करते हैं — सामान्य-उद्देश्य उपयोगिताएं, रैपर, और विशेषकर डेकोरेटर (जिन्हें अज्ञात सिग्नेचर के फंक्शन को *args, **kwargs के माध्यम से लपेटना चाहिए) लिखने के लिए आवश्यक।
अनपैकिंग दिशा (*list, **dict) तर्कों को आगे बढ़ाने या फैलाने के लिए समान रूप से उपयोगी है।
एकत्रण और अनपैकिंग दोनों को समझना पुन: प्रयोज्य, सामान्य Python कोड लिखने और इन सुविधाओं पर निर्भर करने वाली कई लाइब्रेरी APIs और डेकोरेटर को पढ़ने के लिए मुख्य है।
विस्तृत उत्तरों के साथ IT इंटरव्यू प्रश्नों की एक लाइब्रेरी — जूनियर से सीनियर तक।
दान करें