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
অন্য বিকল্পটি হ'ল আপনার ফাংশনে অতিরিক্ত কাওয়ারগুলি গ্রহণ (এবং উপেক্ষা):
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
আপনি কাওয়ার্গসের মতো কার্যকরভাবে অবস্থানগত আর্গুমেন্ট এবং তালিকাগুলি বা টিপলগুলি ব্যবহার করতে পারেন তার চেয়ে আরও লক্ষ্য করুন, অবস্থানগত এবং কীওয়ার্ড আর্গুমেন্ট উভয়কেই যুক্ত করে আরও উন্নত উদাহরণ এখানে দেওয়া হয়েছে:
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}