*args and **kwargs
args और kwargs क्यों
कभी आपको पहले से पता नहीं होता कि function को कितने arguments मिलेंगे। *args और **kwargs function को कितने भी arguments स्वीकार करने देते हैं। *args extra positional values इकट्ठा करता है, और **kwargs extra named values।
*args → extra positional values का tuple। **kwargs → extra named values का dict।*args — कई positional values
def add(*args):
total = 0
for n in args:
total += n
return total
print(add(1, 2, 3)) # 6
print(add(5, 10, 15, 20)) # 50
50
*args आप जितने भी numbers भेजें उन्हें tuple में इकट्ठा करता है, तो वही function 3 numbers या 4 — या किसी भी गिनती के लिए चलता है।
**kwargs — कई keyword values
def info(**kwargs):
for key, value in kwargs.items():
print(key, "=", value)
info(name="Aman", age=18, city="Delhi")
age = 18
city = Delhi
**kwargs named arguments को dictionary में इकट्ठा करता है। हर key और value पढ़ने को इसकी .items() पर loop कर सकते हैं।
दोनों साथ इस्तेमाल
def demo(a, *args, **kwargs):
print("a:", a)
print("args:", args)
print("kwargs:", kwargs)
demo(1, 2, 3, x=10, y=20)
args: (2, 3)
kwargs: {'x': 10, 'y': 20}
सामान्य parameter a पहली value लेता है, *args बाक़ी positional पकड़ता है, और **kwargs named पकड़ता है। क्रम मायने रखता है: सामान्य, फिर *args, फिर **kwargs।
* और ** से unpacking
वही symbols call करते समय list या dict को वापस arguments में फैला सकते हैं।
def add(a, b, c):
return a + b + c
nums = [1, 2, 3]
print(add(*nums)) # list फैलाता है -> add(1,2,3)
data = {"a": 1, "b": 2, "c": 3}
print(add(**data)) # dict फैलाता है -> add(a=1,b=2,c=3)
6
यहाँ * और ** इकट्ठा करने का उल्टा करते हैं — list को positional arguments में और dict को keyword arguments में unpack करते हैं।
आम गलतियाँ
- गलत parameter क्रम। यह सामान्य params, फिर
*args, फिर**kwargsहोना चाहिए। - यह सोचना कि नाम ज़रूरी हैं। सिर्फ़
*और**मायने रखते हैं; नाम convention हैं। - Types मिला देना।
argstuple है,kwargsdict — उसी अनुसार access कीजिए। - Unpack करना भूलना। जहाँ अलग values चाहिए वहाँ पूरी list भेजना —
*listइस्तेमाल कीजिए।
सारांश
*argsfunction को कितने भी positional values (tuple के रूप में) लेने देता है।**kwargsउसे कितने भी named values (dict के रूप में) लेने देता है।- क्रम: सामान्य parameters, फिर
*args, फिर**kwargs। - सिर्फ़
*और**मायने रखते हैं — नाम convention हैं। - list या dict unpack करने को call करते समय
*और**इस्तेमाल कीजिए।
आगे, बुनियाद दोहराइए Python functions में, या देखिए list comprehension।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Python में *args और **kwargs क्या हैं?
*args extra positional arguments को tuple में इकट्ठा करता है, और **kwargs extra keyword arguments को dictionary में। ये functions को लचीला बनाते हैं।*args और **kwargs में क्या अंतर है?
*args बिना नाम भेजी positional values के लिए है (जैसे add(1, 2, 3))। **kwargs named values के लिए (जैसे info(name="Aman", age=18))। एक tuple देता है, दूसरा dictionary।क्या नाम args और kwargs ही होने चाहिए?
* और ** मायने रखते हैं। *args और **kwargs बस आम convention हैं; *numbers या **options बिल्कुल वैसे ही चलते हैं।Parameters किस क्रम में आते हैं?
*args, फिर keyword-only parameters, फिर **kwargs। गलत क्रम में रखना syntax error देता है।* और ** से unpacking क्या करता है?
* list/tuple को positional arguments में फैलाता है और ** dictionary को keyword arguments में। यह उन्हें इकट्ठा करने का उल्टा है।