पहले स्वीकार किए गए उत्तर के रूप में पदावनत किया गया है 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
मानक पुस्तकालय मॉड्यूल के लिए कोई औचित्य नहीं होगा ।