2012-06-23 18 views
29

मैं एक पायथन डॉकस्ट्रिंग में कहीं और पहले दस्तावेज़ वाले फ़ंक्शन पैरामीटर का संदर्भ देना चाहता हूं।मैं स्फिंक्स मार्कअप का उपयोग करके किसी दस्तावेज़ वाले पायथन फ़ंक्शन पैरामीटर का संदर्भ कैसे दूं?

def foo(bar): 
    """Perform foo action 
    :param bar: The bar parameter 
    """ 

    def nested(): 
     """Some nested function that depends on enclosing scope's bar parameter. 
     I'd like to reference function foo's bar parameter here 
     with a link, is that possible?""" 
     return bar * bar 

    # ... 
    return nested() 

वहाँ स्फिंक्स मार्कअप का उपयोग कर एक पैरामीटर संदर्भ एम्बेड करने के लिए एक आसान तरीका है, या यह स्वतः ही होगा: निम्नलिखित (वैसे पूरी तरह से कृत्रिम) उदाहरण पर विचार करें?

(मैं एक पूरी स्फिंक्स नौसिखिया। मैं स्फिंक्स डॉक्स स्कैनिंग किया गया है और इस प्रश्न का उत्तर नहीं मिला है, या एक उदाहरण उचित मार्कअप का प्रदर्शन कर रहा हूँ।)

उत्तर

17

मैंने अभी इस कार्य को पूरा करने के लिए एक विस्तार बनाया है। अब तक यह स्टैंडअलोन एचटीएमएल निर्माण और अतिरिक्त रूप से रीडहेडॉक्स के साथ काम कर रहा है (कुछ और बदलावों के बाद)।

एक्सटेंशन यहां उपलब्ध है: https://pypi.python.org/pypi/sphinx-paramlinks/

मैं अभी अलेम्बिक और स्क्लाक्लेमी परियोजनाओं के लिए इसे बाहर कर रहा हूं। (sample)।

मैं सुझाव के साथ असहमति लेता हूं कि पैराम से जुड़ने का मतलब है कि दस्तावेज़ बहुत लंबा हैं। पायथन मानक लाइब्रेरी यहां एक खराब उदाहरण है क्योंकि stdlib फ़ंक्शन जरूरी और सरल हैं। सॉफ़्टवेयर जो एक अधिक मोटे अनाज वाले कार्य को पूरा कर रहा है, जहां एक एकल समस्या हल करने के लिए जटिल समस्या के शीर्ष पर सवारी करती है, अक्सर ऐसे पैरामीटर होते हैं जिनके लिए बहुत अधिक स्पष्टीकरण की आवश्यकता होती है; यह स्पष्टीकरण अक्सर किसी अन्य समस्या के समाधान के रूप में काफी मूल्यवान होता है, और इसलिए इसे लिंक करने में सक्षम होना बहुत महत्वपूर्ण है।

+0

यह बहुत अच्छा है, लेकिन गुगली डॉकस्ट्रिंग्स (जैसे 'sphinxcontrib.napoleon' के साथ उपयोग किए जाने वाले) के साथ काम नहीं करता है। क्या ऐसा कुछ है जो काम करने के लिए किया जा सकता है? – orome

+1

इस पर निर्भर करता है कि यह कैसे काम करता है। यदि यह सीधे पुनर्गठित पाठ पर पैरा को फिर से लिखता है, तो स्फिंक्स-पैरालिंक्स में वास्तव में बॉक्स के बाहर पेश करने के लिए बहुत कुछ नहीं होगा, क्योंकि यह स्फिंक्स को नियंत्रित करने से पहले कच्चे आरएसटी को पार्स करने पर निर्भर करता है। स्फिंक्स के आंतरिक भाग में हेरफेर करने से बचने के लिए यह काफी हद तक है। यह बहुत अधिक ** बेहतर होगा यदि स्पिंक्स ने इस बिंदु पर मूल रूप से इस सुविधा को लागू किया है। मुझे उम्मीद है कि मेरा विस्तार यह स्पष्ट करता है कि इस सुविधा की कितनी जरुरत है। – zzzeek

+0

धन्यवाद। मुझे ऐसा कुछ उम्मीद थी (यह समझ में आता है)। और मैं आपसे सहमत हूं कि यह एक बेहद जरूरी विशेषता है। – orome

0

आप देख रहे हैं एक के लिए foo की परिभाषा को सीधे लिंक करने का तरीका तो आपका दस्तावेज़ बहुत लंबा है या आप अपने पाठक को वन के पेड़ या दोनों के संयोजन के लिए जंगल को अनदेखा करने के लिए कह रहे हैं।

defaultdict Examples से एक उदाहरण लेते हुए:

Setting the :attr:`default_factory` to :class:`int` makes the 
:class:`defaultdict` useful for counting (like a bag or multiset in other 
languages): 

अगर मैं default_factory का अर्थ मैं शायद वहाँ का नेतृत्व करने के लायक नहीं है खोजने के लिए collections.defaultdict में पांच वाक्य पढ़ने के लिए परेशान नहीं किया जा सकता।

ध्यान दें कि विशेषता संदर्भ सिंटैक्स उपरोक्त अनुभाग में रूप में ही है:

The first argument provides the initial value for the :attr:`default_factory` 
attribute; it defaults to ``None``. 

लेकिन स्फिंक्स की तरह वर्तमान अनुभाग क्षेत्र से बाहर तक नहीं पहुंचता है और इतने स्टाइल पाठ के रूप में बाद में संदर्भ के renders यह लग रहा है एक एंकर के बजाए। अगर यह जानबूझकर होता तो मुझे आश्चर्य नहीं होगा।

+0

शायद मेरा मूल प्रश्न/उदाहरण अत्यधिक सरल था। (यही तब होता है जब मैं नींद से वंचित राज्य में प्रश्न पोस्ट करता हूं: डी) मैंने अपनी प्रेरणा को स्पष्ट करने में मदद के लिए प्रश्न और कोड उदाहरण अपडेट किया है। – Inactivist

24

sphinx के साथ फ़ंक्शन के पैरामीटर के प्रत्यक्ष संदर्भ प्राप्त करने का कोई आसान तरीका नहीं है और मुझे इस समस्या का विस्तार नहीं पता है।

documentation of the python domain बताता है कि कौन से ऑब्जेक्ट्स को संदर्भित किया जा सकता है।

एक संभव तरीका उपयोगकर्ता पैरामीटर के लिए समारोह foo की bar होगा

See parameter ``bar`` in :func:`foo`. 

हो सकता है कि एक सीधा संदर्भ एक विस्तार लिख कर संभव होगा एक संदर्भ देने के लिए।