पहले स्वीकार किए गए उत्तर के रूप में पदावनत किया गया है Python 3.0। उपयोग करने के बजाय inspect.getargspecअब आपको उस Signatureवर्ग के लिए विकल्प चुनना चाहिए जिसने इसे उलट दिया है।
समारोह के लिए एक हस्ताक्षर बनाना आसान है signatureसमारोह :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
अब, आप या तो इसके मापदंडों को शीघ्रता से देख सकते strहैं:
str(sig) # returns: '(self, arg1, kwarg1=None)'
या आप पैरामीटर ऑब्जेक्ट के माध्यम से विशेषता नामों का मानचित्रण भी प्राप्त कर सकते हैं sig.parameters।
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
साथ ही, आप कॉल कर सकते हैं lenपर sig.parametersयह भी तर्क इस समारोह की आवश्यकता की संख्या को देखने के लिए:
print(len(params)) # 3
paramsमैपिंग में प्रत्येक प्रविष्टि वास्तव में एक ऐसी Parameterवस्तु है, जिसमें आपके जीवन को आसान बनाने के लिए और अधिक विशेषताएं हैं। उदाहरण के लिए, एक पैरामीटर को हथियाने और इसके डिफ़ॉल्ट मान को देखने के साथ अब आसानी से किया जाता है:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
इसी तरह बाकी वस्तुओं के लिए parameters।
पायथन 2.xउपयोगकर्ताओं के लिए, जबकि पदावनत inspect.getargspec नहीं किया जाता है, जल्द ही भाषा :-) होगी। Signatureवर्ग में उपलब्ध नहीं है 2.xश्रृंखला और नहीं होगा। इसलिए आपको अभी भी साथ काम करने की आवश्यकता है inspect.getargspec।
अजगर 2 और 3 के बीच में परिवर्तित करने की है, यदि आप कोड है कि इंटरफेस पर निर्भर करता है getargspecअजगर 2 में और का उपयोग करने जा signatureमें 3भी मुश्किल है, आप मूल्यवान विकल्प क्या है का उपयोग करने का inspect.getfullargspec। यह getargspecफ़ंक्शन के तर्कों को पकड़ने के लिए एक समान इंटरफ़ेस प्रदान करता है (कुछ कॉल करने योग्य तर्क) जो कुछ अतिरिक्त मामलों को संभालने के दौरान भी getargspecऐसा नहीं करता है:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
जैसे getargspec, तर्कों का getfullargspecरिटर्न NamedTupleहोता है।
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectमानक पुस्तकालय मॉड्यूल के लिए कोई औचित्य नहीं होगा ।