मैं एक शब्दकोश कि समारोह के आदानों की तुलना में अधिक आइटम हैं के साथ एक समारोह गठबंधन करने के लिए सबसे अच्छा तरीका रहा हूँकिसी फ़ंक्शन के साथ फ़ंक्शन को कॉल करने के लिए जिसमें फ़ंक्शन की तुलना में अधिक आइटम हैं, पैरामीटर हैं?
बुनियादी ** kwarg unpacking इस मामले में विफल रहता है:
def foo(a,b):
return a + b
d = {'a':1,
'b':2,
'c':3}
foo(**d)
--> TypeError: foo() got an unexpected keyword argument 'c'
कुछ शोध करने के बाद
import inspect
# utilities
def get_input_names(function):
'''get arguments names from function'''
return inspect.getargspec(function)[0]
def filter_dict(dict_,keys):
return {k:dict_[k] for k in keys}
def combine(function,dict_):
'''combine a function with a dictionary that may contain more items than the function's inputs '''
filtered_dict = filter_dict(dict_,get_input_names(function))
return function(**filtered_dict)
# examples
def foo(a,b):
return a + b
d = {'a':1,
'b':2,
'c':3}
print combine(foo,d)
--> 3
मेरा प्रश्न है: मैं निम्नलिखित दृष्टिकोण के साथ आया था इस इस समस्या से निपटने का एक अच्छा तरीका है, या वहाँ एक बेहतर अभ्यास है या वहाँ एक mechan है उस भाषा में आईएसएम है जिसे मैं शायद याद कर रहा हूं?
धन्यवाद। मुझे शायद यह उल्लेख करना चाहिए था कि मैं एक कार्यक्रम के लिए एक ढांचा तैयार कर रहा हूं जहां अन्य लोग (कभी-कभी पाइथन में सापेक्ष नौसिखिया) कार्य बना रहे हैं। इसलिए, मैं उन्हें ** kwargs से निपटने के लिए पसंद नहीं करना चाहूंगा, बल्कि मूलभूत फ़ंक्शन इनपुट का उपयोग करके: foo (a, b); मैं उपयोगिता कार्यों में इस ** kwargs फ़िल्टरिंग जटिलता छिपाना चाहता हूँ। –