] हालांकि, वे कभी -कभी मूल फ़ंक्शन के हस्ताक्षर को अस्पष्ट कर सकते हैं। यह प्रलेखन, डिबगिंग और स्वचालित उपकरणों के लिए समस्याग्रस्त हो सकता है। def g (*args, ** kwargs): args = [int (x) X के लिए args] kwargs = तानाशाही ((k, int (v)) k के लिए, v kwargs.items ()) वापसी f (*args, ** kwargs) G
को वापस करें, जबकि सजावट अपेक्षित रूप से काम करती है, सजाए गए फ़ंक्शन के हस्ताक्षर को "
मैन्युअल रूप से हस्ताक्षर को डॉकस्ट्रिंग में कॉपी करना।
प्रत्येक विशिष्ट हस्ताक्षर के लिए एक नया डेकोरेटर बनाना। एक सुरुचिपूर्ण समाधान:
आयात डेकोरेटर @डेकोरेटर def args_as_ints (f, *args, ** kwargs): args = [int (x) X के लिए args] kwargs = तानाशाही ((k, int (v)) k के लिए, v kwargs.items ()) वापसी f (*args, ** kwargs)
यह डेकोरेटर मूल फ़ंक्शन के हस्ताक्षर को लपेटे हुए फ़ंक्शन के तर्क के रूप में पारित करके संरक्षित करता है। DEF FUNY_FUNCTION (x, y, z = 3): "" "X*y 2*z की गणना करता है" "" X*y 2*z
def args_as_ints(f):
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
>>> सहायता (funny_function) मॉड्यूल में फनी_फंक्शन पर मदद करें __main__: फनी_फंक्शन (x, y, z = 3) X*y 2*z
python 3.4:
के लिए। def args_as_ints (func): @functools.wraps (func) डेफ रैपर (*args, ** kwargs): args = [int (x) X के लिए args] kwargs = तानाशाही ((k, int (v)) k के लिए, v kwargs.items ()) फंक लौटें (*args, ** kwargs) इन तकनीकों का उपयोग करके आवरण
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3