2016-06-20 1 views
4

Je voudrais analyser une docstring numpydoc et accéder à chaque composant par programmation.Comment puis-je analyser un docstring numpydoc et accéder aux composants?

Par exemple:

def foobar(a, b): 
    '''Something something 

    Parameters 
    ---------- 
    a : int, default: 5 
     Does something cool 
    b : str 
     Wow 
''' 

Ce que je voudrais faire est la suivante:

parsed = magic_parser(foobar) 
parsed.text # Something something 
parsed.a.text # Does something cool 
parsed.a.type # int 
parsed.a.default # 5 

J'ai cherché et trouvé des choses comme numpydoc et napoleon mais je n'ai pas trouvé bonnes pistes pour savoir comment les utiliser dans mon propre programme. J'apprécierais toute aide.

+1

Je sais que vous pouvez utiliser 'inspect' pour obtenir des informations mais il n'analyse pas la docstring, seulement les annotations et les valeurs par défaut, ainsi la signature' def foobar (a = 5: "Fait quelque chose de cool", b = DEFAULT : "Wow"): "serait vraiment facile à" inspecter ". –

+0

Oui, ce serait bien d'utiliser 'inspect' mais les docstrings que je voudrais analyser n'ont pas été écrits par moi, et malheureusement, n'utilisent pas d'annotations. Merci quand même! – trianta2

+0

J'ai cherché quelque chose comme ceci, et quelque chose qui pourrait également analyser docstring numpy. Il semble que tu devrais écrire le tien. Même si je suis 100% positif que quelque chose comme ça existe déjà depuis que Pycharm le fait d'une manière ou d'une autre. – tal

Répondre

3

Vous pouvez utiliser NumpyDocString depuis numpydoc pour analyser des docstrings dans une structure compatible Python.

Voici un exemple de la façon de l'utiliser:

from numpydoc.docscrape import NumpyDocString 


class Photo(): 
    """ 
    Array with associated photographic information. 


    Parameters 
    ---------- 
    x : type 
     Description of parameter `x`. 
    y 
     Description of parameter `y` (with type not specified) 

    Attributes 
    ---------- 
    exposure : float 
     Exposure in seconds. 

    Methods 
    ------- 
    colorspace(c='rgb') 
     Represent the photo in the given colorspace. 
    gamma(n=1.0) 
     Change the photo's gamma exposure. 

    """ 

    def __init__(x, y): 
     print("Snap!") 

doc = NumpyDocString(Photo.__doc__) 
print(doc["Summary"]) 
print(doc["Parameters"]) 
print(doc["Attributes"]) 
print(doc["Methods"]) 

Cependant, cela ne fonctionnera pas avec l'exemple que vous avez donné (ni beaucoup de code que je veux exécuter sur) pour des raisons que je ne comprends pas. Au lieu de cela, vous devez utiliser la classe spécifique FunctionDoc ou ClassDoc, en fonction de votre cas d'utilisation.

from numpydoc.docscrape import FunctionDoc 

def foobar(a, b): 
    '''Something something 

    Parameters 
    ---------- 
    a : int, default: 5 
     Does something cool 
    b : str 
     Wow 
''' 

doc = FunctionDoc(foobar) 
print(doc["Parameters"]) 

j'ai pensé tout cela par regardant this test in their source code, pour ainsi dire le moins, ce n'est pas vraiment un documenté, mais nous espérons que cela est suffisant pour que vous puissiez commencer.