2016-01-07 6 views
15

कभी-कभी पायथन में एक फ़ंक्शन एक लचीली प्रकार का तर्क स्वीकार कर सकता है। या यह एक लचीला प्रकार का मूल्य वापस कर सकता है। अब मैं इस तरह के एक समारोह का एक अच्छा उदाहरण याद नहीं कर सकता, इसलिए मैं दिखा रहा हूं कि नीचे एक खिलौना उदाहरण के साथ ऐसा कोई फ़ंक्शन कैसा दिख सकता है।एक पैरामीटर के लिए एकाधिक प्रकार या स्पिंक्स द्वारा संसाधित डॉकस्ट्रिंग में वापसी मूल्य को कैसे व्यक्त किया जाए?

मैं जानना चाहता हूं कि स्फिंक्स प्रलेखन नोटेशन का उपयोग करके ऐसे कार्यों के लिए डॉकस्ट्रिंग कैसे लिखना है। नीचे दिए गए उदाहरण में, तर्क str या int हो सकते हैं। इसी प्रकार यह str या int लौटा सकता है।

मैंने एक उदाहरण डॉकस्ट्रिंग दिया है (दोनों डिफ़ॉल्ट स्फिंक्स नोटेशन के साथ-साथ Google नोटेशन स्फिंक्स के नैपोलियन एक्सटेंशन द्वारा समझा जाता है)। मुझे नहीं पता कि यह लचीला प्रकारों को दस्तावेज करने का सही तरीका है या नहीं।

स्फिंक्स डिफ़ॉल्ट अंकन:

def add(a, b): 
    """Add numbers or concatenate strings. 

    :param int/str a: String or integer to be added 
    :param int/str b: String or integer to be added 
    :return: Result 
    :rtype: int/str 
    """ 
    pass 

स्फिंक्स नेपोलियन गूगल अंकन:

def add2(a, b): 
    """Add numbers or concatenate strings. 

    Args: 
     a (int/str): String or integer to be added 
     b (int/str): String or integer to be added 

    Returns: 
     int/str: Result 
    """ 
    pass 

क्या मापदंडों के लिए कई प्रकार के व्यक्त या docstrings कि द्वारा संसाधित किया जा के लिए होती हैं में मूल्यों वापस जाने के लिए सही तरीका है स्फिंक्स?

+1

इसी तरह के प्रश्न: http://stackoverflow.com/q/33482493/407651 – mzjn

उत्तर

9

अजगर 3.5 Union प्रकार अब

https://docs.python.org/3/library/typing.html#typing.Union

संकेत के लिए, मुझे लगता है कि मॉड्यूल के रूप में ठीक उसी वाक्य रचना है, जो होगा का उपयोग करना चाहिये:

  • मेकअप पोर्टिंग आसान है, और संभवतः automatable , बाद में
  • चीजों को करने के लिए एक अद्वितीय अच्छी तरह से परिभाषित कैननिकल तरीका निर्दिष्ट करता है

उदाहरण:

def f(int_or_float): 
    """ 
    :type int_or_float: Union[int, float] 
    :rtype: float 
    """ 
    return int_or_float + 1.0 

फिर जब आप 3.5 है, तो आप सिर्फ लिखेंगे:

def f(list_of_int : Union[int, float]) -> float: 
    return int_or_float + 1.0 

मुझे लगता है कि यह पहले से ही प्रलेखन पीढ़ी समर्थन हासिल है, लेकिन मैं अभी तक यह परीक्षण नहीं किया: https://github.com/sphinx-doc/sphinx/issues/1968

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

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