और एक फंक्शन को के तर्कों को स्वीकार करने देते हैं। अतिरिक्त तर्कों को एक tuple में एकत्रित करता है; अतिरिक्त तर्कों को एक dict में एकत्रित करता है। (नाम सम्मेलन हैं — और वह हैं जो महत्वपूर्ण हैं।)
और एक फंक्शन को के तर्कों को स्वीकार करने देते हैं। अतिरिक्त तर्कों को एक 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 और डेकोरेटर को पढ़ने के लिए मुख्य है।