पहले से स्वीकार किए जाते हैं जवाब Python 3.0
के रूप में deprecated किया गया है। inspect.getargspec
का उपयोग करने के बजाय अब आपको Signature
कक्षा का चयन करना चाहिए जो इसे हटा देता है। , अब
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
आप या तो इसे ing str
द्वारा जल्दी से अपने मानकों को देख सकते हैं:
समारोह के लिए एक हस्ताक्षर बनाना signature
function आसान है
str(sig) # returns: '(self, arg1, kwarg1=None)'
या आप भी एक प्राप्त कर सकते हैं sig.parameters
के माध्यम से पैरामीटर ऑब्जेक्ट्स में विशेषता नामों का मानचित्रण।
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
साथ ही, आपको sig.parameters
पर len
फोन भी तर्क की संख्या को देखने के लिए इस समारोह की आवश्यकता कर सकते हैं:
print(len(params)) # 3
params
मानचित्रण में प्रत्येक प्रविष्टि वास्तव में एक Parameter
object अपने जीवन बनाने आगे गुण है कि आसान।
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
इसी तरह parameters
में निहित वस्तुओं के बाकी के लिए: उदाहरण के लिए, एक पैरामीटर हथियाने और उसके डिफ़ॉल्ट मान को देखने अब आसानी के साथ किया जाता है।
अजगर 2.x
उपयोगकर्ताओं के लिए के रूप में, जबकि inspect.getargspec
पदावनत नहीं है, भाषा जल्दी ही हो जाएगा :-)। Signature
कक्षा 2.x
श्रृंखला में उपलब्ध नहीं है और यह नहीं होगी। तो आपको अभी भी inspect.getargspec
के साथ काम करने की आवश्यकता है।
अजगर 2 और 3 के बीच संक्रमण, यदि आप कोड है कि अजगर 2 में getargspec
के इंटरफेस पर निर्भर करता है है और 3
में signature
का उपयोग करने जा के रूप में भी मुश्किल है, आप 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={})
मैं एक अधिसूचना प्रणाली लागू कर रहा हूं, जो वास्तव में पहले से नहीं जानता कि रिसीवर कितने तर्क चाहता है। (आम तौर पर यह सब या कोई नहीं है।) –
सवाल पूरी तरह से जरूरी है; अगर यह नहीं था (चूंकि आप हमेशा स्रोत पढ़ सकते हैं), 'निरीक्षण' मानक पुस्तकालय मॉड्यूल के लिए कोई औचित्य नहीं होगा। – flow
भाषाओं की बहुत कम से कम एक अन्यायपूर्ण सुविधा लागू करती है। 'निरीक्षण' मॉड्यूल में कई अन्य विशेषताएं हैं, इसलिए यह कहना गलत है कि यदि कोई विशेष कार्य इसमें होता है तो संपूर्ण मॉड्यूल अन्यायपूर्ण होगा। इसके अलावा, यह देखना आसान है कि इस सुविधा को खराब तरीके से कैसे इस्तेमाल किया जा सकता है। (Http://stackoverflow.com/questions/741950 देखें)। उस ने कहा, यह एक उपयोगी विशेषता है, खासकर सजावटी और अन्य कार्यों को लिखने के लिए जो काम पर काम करते हैं। – user1612868