In[1]: def myfunc(a=1, b=2):
In[2]: print(a, b)
In[3]: mydict = {'a': 100, 'b': 200}
In[4]: myfunc(**mydict)
100 200
कुछ अतिरिक्त विवरण जो जानना उपयोगी हो सकते हैं (यह पढ़ने के बाद मेरे पास जो सवाल थे और गए और परीक्षण किए गए):
- फ़ंक्शन में पैरामीटर हो सकते हैं जो नहीं हैं जो शब्दकोश में शामिल हैं
- आप एक पैरामीटर को ओवरराइड नहीं कर सकते जो पहले से ही डिक्शनरी में है
- डिक्शनरी में ऐसे पैरामीटर नहीं हो सकते जो फ़ंक्शन में नहीं हैं।
उदाहरण:
नंबर 1: फ़ंक्शन में ऐसे पैरामीटर हो सकते हैं जो शब्दकोश में शामिल नहीं हैं
In[5]: mydict = {'a': 100}
In[6]: myfunc(**mydict)
100 2
नंबर 2: आप एक पैरामीटर को ओवरराइड नहीं कर सकते जो पहले से ही डिक्शनरी में है
In[7]: mydict = {'a': 100, 'b': 200}
In[8]: myfunc(a=3, **mydict)
TypeError: myfunc() got multiple values for keyword argument 'a'
नंबर 3: शब्दकोश में ऐसे पैरामीटर नहीं हो सकते जो फ़ंक्शन में नहीं हैं।
In[9]: mydict = {'a': 100, 'b': 200, 'c': 300}
In[10]: myfunc(**mydict)
TypeError: myfunc() got an unexpected keyword argument 'c'
जैसा कि टिप्पणियों में अनुरोध किया गया है, नंबर 3 का समाधान फ़ंक्शन में उपलब्ध कीवर्ड तर्कों के आधार पर शब्दकोश को फ़िल्टर करना है:
In[11]: import inspect
In[12]: mydict = {'a': 100, 'b': 200, 'c': 300}
In[13]: filtered_mydict = {k: v for k, v in mydict.items() if k in [p.name for p in inspect.signature(myfunc).parameters.values()]}
In[14]: myfunc(**filtered_mydict)
100 200
एक अन्य विकल्प अपने कार्य में अतिरिक्त kwargs को स्वीकार करना (और अनदेखा करना) है:
In[15]: def myfunc2(a=None, **kwargs):
In[16]: print(a)
In[17]: mydict = {'a': 100, 'b': 200, 'c': 300}
In[18]: myfunc2(**mydict)
100
इससे आगे नोटिस करें कि आप स्थितिगत तर्कों और सूचियों या tuples का प्रभावी रूप से उसी तरह उपयोग कर सकते हैं जैसे कि kwargs, यहाँ एक और अधिक उन्नत उदाहरण स्थितीय और कीवर्ड args को शामिल किया गया है:
In[19]: def myfunc3(a, *posargs, b=2, **kwargs):
In[20]: print(a, b)
In[21]: print(posargs)
In[22]: print(kwargs)
In[23]: mylist = [10, 20, 30]
In[24]: mydict = {'b': 200, 'c': 300}
In[25]: myfunc3(*mylist, **mydict)
10 200
(20, 30)
{'c': 300}