7

In Python dir() returns the list of names in the current local scope. __doc__ returns the complete docstring of an object.

How can I list all names in the current local scope and print the first line of each item's docstring ?

To elaborate: for import numpy as np I would like to get a list of short descriptions of all names returned by dir(np) e.g. print(np.nonzero.__doc__.split('.', 1)[0]).

How can I do this ?

Danil Speransky
  • 29,891
  • 5
  • 68
  • 79
Josh Reuben
  • 289
  • 2
  • 8

2 Answers2

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))
Danil Speransky
  • 29,891
  • 5
  • 68
  • 79
0

I've used something like this. It's similar but not exactly what you're looking for. You can adjust the docstring output to your needs.

###############################################################################
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"
Marcel Wilson
  • 3,842
  • 1
  • 26
  • 55