2017-08-21 6 views
7

Python dir()では、現在のローカルスコープ内の名前のリストを返します。 __doc__は、オブジェクトの完全なドキュメントストリングを返します。Pythonオブジェクトのすべてのメンバーのドキュメントストリングの短いバージョンを印刷する方法はありますか?

現在のローカルスコープ内のすべての名前をリストし、各アイテムのドキュメントストリングの最初の行を印刷するにはどうすればよいですか?

具体的には:import numpy as npdir(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" 
関連する問題