यहाँ सज्जाकार के माध्यम से मेरे समाधान है:
def showargs(function):
def inner(*args, **kwargs):
return function((args, kwargs), *args, **kwargs)
return inner
@showargs
def some_func(info, arg1, arg2, arg3=1, arg4=2):
print arg1,arg2,arg3,arg4
return info
In [226]: some_func(1,2,3, arg4=4)
1 2 3 4
Out[226]: ((1, 2, 3), {'arg4': 4})
एक तरह से यह आगे साफ करने के लिए हो सकता है, लेकिन यह मेरे लिए न्यूनतम दखल लगता है और फोन करने के कोड में कोई परिवर्तन नहीं की आवश्यकता है।
संपादित करें:
args, kwargs = info
if 'arg4' in kwargs:
print "arg4 passed as keyword argument"
अस्वीकरण:: वास्तव में परीक्षण करने के लिए करता है, तो विशेष रूप से आर्ग कीवर्ड द्वारा पारित किए गए, तो कुछ इस तरह करते हैं some_func के अंदर निम्नलिखित आप शायद विचार करना चाहिए या नहीं, आप सच में ध्यान तर्क कैसे पारित किए गए थे। यह पूरा दृष्टिकोण अनावश्यक हो सकता है।
मुझे ऐसा नहीं लगता ... फिर ** केडब्ल्यू के साथ परेशान क्यों होगा? – jldupont
मुझे खेद है, लेकिन अगर यह सिर्फ आपकी जिज्ञासा है तो मैं बंद करने के लिए मतदान कर रहा हूं, कोई वास्तविक समस्या नहीं है, कोई उपयोग नहीं है, और किसी को कभी भी ऐसी समस्या नहीं होगी जिसके बारे में आप सपने देख रहे हैं। – SilentGhost
असल में, मैं एक बार उस समस्या में भाग गया। मैं कुछ सीडीएटीए के आसपास एक एक्सएमएल रैपर उत्पन्न करने के लिए एक फ़ंक्शन लिख रहा था (एक स्टार्ट टैग प्रीपेड करें और एक एंड टैग संलग्न करें), और चाहता था कि यह 'def wrap (टैग, सामग्री = कोई नहीं, ** attrs) जैसा दिखता हो:' लेकिन फिर इस समस्या में आगे बढ़े कि गुणों में वर्ण हो सकते हैं कि पायथन पहचानकर्ता नहीं कर सकते हैं। लेकिन यह कुछ मिनटों के लिए एक दिलचस्प अभ्यास था। –