2017-08-21 44 views
7

在Python中dir()返回當前本地作用域中的名稱列表。 __doc__返回對象的完整文檔字符串。有沒有辦法爲Python對象的所有成員打印簡短版本的文檔字符串?

如何列出當前本地作用域中的所有名稱並打印每個項目文檔字符串的第一行?

詳細說明:對於import numpy as np我想獲得dir(np)返回的所有名稱的簡短描述列表,例如, print(np.nonzero.__doc__.split('.', 1)[0])

我該怎麼做?

回答

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

我已經使用過類似的東西。它是相似的,但不是你正在尋找的。您可以根據需要調整文檔字符串輸出。

############################################################################### 
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" 
相關問題