2012-07-05 19 views
6

मैं मॉड्यूल से पुनर्प्राप्त विधि के तर्कों को समझने की कोशिश कर रहा हूं। मुझे एक आसान काम के साथ inspect मॉड्यूल मिला, getargspec। यह एक फ़ंक्शन के लिए काम करता है जिसे मैं परिभाषित करता हूं, लेकिन आयातित मॉड्यूल से फ़ंक्शंस के लिए काम नहीं करेगा।पाइथन इंस्पेक्ट.getargspec अंतर्निहित फ़ंक्शन

import math, inspect 
def foobar(a,b=11): pass 
inspect.getargspec(foobar) # this works 
inspect.getargspec(math.sin) # this doesn't 

मैं इस तरह एक त्रुटि मिल जाएगा: केवल स्थानीय कार्यों के लिए बनाया गया inspect.getargspec

File "C:\...\Python 2.5\Lib\inspect.py", line 743, in getargspec 
    raise TypeError('arg is not a Python function') 
TypeError: arg is not a Python function 

है या मैंने कुछ गलत कर रहा हूँ?

+1

हाँ, यह इस तरह से डिज़ाइन किया गया है, http://bugs.python.org/issue1748064 – georg

उत्तर

11

पायथन के बजाय सी में लागू किए गए फ़ंक्शन के लिए इस तरह की जानकारी प्राप्त करना असंभव है।

इसका कारण यह है कि (फ्री-फॉर्म) डॉकस्ट्रिंग को पार्स करके छोड़कर विधि को स्वीकार करने के तरीके का कोई तरीका नहीं है क्योंकि तर्क कुछ हद तक (कुछ हद तक) गेटर्ग-जैसा तरीके से पारित होते हैं - यानी यह असंभव है वास्तव में फ़ंक्शन निष्पादित किए बिना यह तर्क प्राप्त करता है कि यह किस तर्क को स्वीकार करता है।

+0

ठीक है, मैं इसे वापस प्राप्त कर रहा हूं। तो ऐसा करने के लिए भी कोई गंदा तरीका है। अगर इसे फ़ंक्शन को कॉल करने की आवश्यकता है, तो ठीक है। – PeetWc

+0

** नहीं **, वास्तव में नहीं। आप केवल कुछ तर्कों को ब्रूटफोर्स कर सकते हैं जहां फ़ंक्शन को कॉल करना अपवाद नहीं उठाता है। लेकिन यह शायद ही उपयोगी है - आपको यह भी पता नहीं होगा कि कुछ वैकल्पिक तर्क हैं जिन्हें आपने कोशिश नहीं की थी। – ThiefMaster

+0

अल्राइट। धन्यवाद। मुझे एक और रास्ता खोजने की जरूरत है। – PeetWc

1

आप ऐसे कार्यों/विधियों के लिए दस्तावेज़ स्ट्रिंग प्राप्त कर सकते हैं जो लगभग हमेशा उसी प्रकार की जानकारी प्राप्त करते हैं जैसे Getargspec। (यानी परम नाम, पैरा का पैरा, वैकल्पिक, डिफ़ॉल्ट मान)।

अपने उदाहरण

import math 
math.sin.__doc__ 

में देता है

"sin(x) 

Return the sine of x (measured in radians)" 

दुर्भाग्य से आपरेशन में कई अलग अलग मानक हैं। देखें What is the standard Python docstring format?

आप यह पता लगा सकते हैं कि कौन से मानक उपयोग में हैं, और फिर उस तरह की जानकारी लें। उपर्युक्त लिंक से ऐसा लगता है कि pyment ऐसा करने में सहायक हो सकता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^