2017-08-21 5 views
7

En Python dir() renvoie la liste des noms dans la portée locale actuelle. __doc__ renvoie la docstring complète d'un objet.Existe-t-il un moyen d'imprimer une version courte de la docstring pour tous les membres d'un objet Python?

Comment puis-je lister tous les noms dans la portée locale actuelle et imprimer la première ligne de la docstring de chaque élément?

Pour élaborer: pour import numpy as np Je voudrais obtenir une liste de brèves descriptions de tous les noms retournés par dir(np) par exemple. print(np.nonzero.__doc__.split('.', 1)[0]).

Comment est-ce que je peux faire ceci?

Répondre

5
def print_members(obj): 
    for key in dir(obj): 
     value = getattr(obj, key) 
     doc = (value.__doc__ or '').split('.', 1)[0] 
     print('MEMBER: %s\nDOCSTRING: %s\n\n' % (key, doc)) 
0

J'ai utilisé quelque chose comme ceci. C'est similaire mais pas exactement ce que vous cherchez. Vous pouvez ajuster la sortie docstring selon vos besoins.

############################################################################### 
def about(obj=None, text=None, capsOnly=False, noLeadingUnderScores=False): 
    """ 
    Utility function to assist with discovery while playing in the Python 
    shell. When possible, returns the sorted dir() and values() of the 
    specified object. 

    * noLeadingUnderScores - toggles display filtering of items that have a 
          leading underscore; only applies to dir() not 
          values() items. 

    * capsOnly - toggles display filtering of items that are uppercase only. 
       this only applies to dir() not values() items. 

    * text -  toggles the display filtering of items that have 'text' 
       within their string; applies to both dir() and values() items. 
    """ 

    print "\n*******************\n* print __obj__ *\n*******************\n" 
    if obj is None: 
     print "about() is meaningless as 'obj' is None" 
    else: 
     # diplay help(), if possible 
     try: 
      if obj.__doc__: 
       print "\n\n********************\n* HELP() results *\n********************\n" 
       for x in obj.__doc__.split('\n'): 
         print x 
     except: 
      print "\nno __obj__ available" 


     # display dir(), if possible 
     print "\n\n*******************\n* DIR() results *\n*******************\n" 
     for x in sorted(dir(obj)): 
      temp = "%s" % x 
      if noLeadingUnderScores and len(temp) > 0 and temp[0] == "_": 
       continue 
      elif capsOnly: 
       if temp == temp.upper(): 
        if text and text in temp: 
         print temp 
       else: 
        continue 
      elif text: 
       if text in temp: 
        print temp 
      else: 
       print temp 

     # display values(), is possible 
     try: 
      if obj.values and type(obj.values) == type({}): 
       print "\n\n**********************\n* DICT values(k,v) *\n**********************\n" 
       for x in sorted(obj.values.keys()): 
        if text: 
         if text in x or text in str(obj.values[x]): 
          print x, obj.values[x] 
        else: 
         print x, obj.values[x] 
     except: 
      print "\nno dictionary like obj.values available"