pythonをストレスなく使う！（__doc__とhelp)

#目的
　**pythonをストレスなく使う！**
そのためには、少しでも、理解のレベルを上げる必要あり。
なんでも、こだわって、、、、理解を深める。
ここで記載しているのは、
**　\_\_doc\_\_ と　help に関して**です。

これらの、関数とかの**使い方を調べる手段**は、『**pythonをストレスなく使う！**』
には、重要だと思います。


#　\_\_doc\_\_ と　help
\_\_doc\_\_とhelpは、大体、同じようなものが出ます。
helpのほうが、クラスが持っているメソッドの情報とか沢山、情報が出る。
ワタシとしては、沢山でるのが鬱陶しいときもあるが、「q」で抜ければいいだけなので、
helpを使うのがいい気がしてきました。

pprintというモジュールを例に示す。例が悪すぎる気もしますが。。。
末尾にpprintのpprintという関数についても示す。

\_\_doc\_\_の例

```
>>>
>>> pprint.__doc__
"Support to pretty-print lists, tuples, & dictionaries recursively.\n\nVery simple, but useful, especially in debugging data structures.\n\nClasses\n-------\n\nPrettyPrinter()\n    Handle pretty-printing operations onto a stream using a configured\n    set of formatting parameters.\n\nFunctions\n---------\n\npformat()\n    Format a Python object into a pretty-printed representation.\n\npprint()\n    Pretty-print a Python object to a stream [default is sys.stdout].\n\nsaferepr()\n    Generate a 'standard' repr()-like value, but protect against recursive\n    data structures.\n\n"
>>>
```

 ↑ print文に入れないと、改行がボロボロです。

```
>>> print(pprint.__doc__)
Support to pretty-print lists, tuples, & dictionaries recursively.

Very simple, but useful, especially in debugging data structures.

Classes
-------

PrettyPrinter()
    Handle pretty-printing operations onto a stream using a configured
    set of formatting parameters.

Functions
---------

pformat()
    Format a Python object into a pretty-printed representation.

pprint()
    Pretty-print a Python object to a stream [default is sys.stdout].

saferepr()
    Generate a 'standard' repr()-like value, but protect against recursive
    data structures.


>>>

```

helpの例。
※***モジュールファイルの場所が示されるのがいいと思いました。***

```
>>>
>>> help(pprint)
Help on module pprint:

NAME
    pprint - Support to pretty-print lists, tuples, & dictionaries recursively.

DESCRIPTION
    Very simple, but useful, especially in debugging data structures.

    Classes
    -------

    PrettyPrinter()
        Handle pretty-printing operations onto a stream using a configured
        set of formatting parameters.

    Functions
    ---------

    pformat()
        Format a Python object into a pretty-printed representation.

    pprint()
        Pretty-print a Python object to a stream [default is sys.stdout].

    saferepr()
        Generate a 'standard' repr()-like value, but protect against recursive
        data structures.

CLASSES
    builtins.object
        PrettyPrinter

    class PrettyPrinter(builtins.object)
     |  PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False)
     |
     |  Methods defined here:
     |
     |  __init__(self, indent=1, width=80, depth=None, stream=None, *, compact=False)
     |      Handle pretty printing operations onto a stream using a set of
     |      configured parameters.
     |
     |      indent
     |          Number of spaces to indent for each level of nesting.
     |
     |      width
     |          Attempted maximum number of columns in the output.
     |
     |      depth
     |          The maximum depth to print out nested structures.
     |
     |      stream
     |          The desired output stream.  If omitted (or false), the standard
     |          output stream available at construction will be used.
     |
     |      compact
     |          If true, several items will be combined in one line.
     |
     |  format(self, object, context, maxlevels, level)
     |      Format object for a specific context, returning a string
     |      and flags indicating whether the representation is 'readable'
     |      and whether the object represents a recursive construct.
     |
     |  isreadable(self, object)
     |
     |  isrecursive(self, object)
     |
     |  pformat(self, object)
     |
     |  pprint(self, object)
     |
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |
     |  __dict__
     |      dictionary for instance variables (if defined)
     |
     |  __weakref__
     |      list of weak references to the object (if defined)

FUNCTIONS
    isreadable(object)
        Determine if saferepr(object) is readable by eval().

    isrecursive(object)
        Determine if object requires a recursive representation.

    pformat(object, indent=1, width=80, depth=None, *, compact=False)
        Format a Python object into a pretty-printed representation.

    pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False)
        Pretty-print a Python object to a stream [default is sys.stdout].

    saferepr(object)
        Version of repr() which can handle recursive data structures.

DATA
    __all__ = ['pprint', 'pformat', 'isreadable', 'isrecursive', 'saferepr...

FILE
    c:\users\XYZZ0\appdata\local\programs\python\python37\lib\pprint.py


>>>

```

pprint.pprint（関数）の例。
これだと、表示が一行なので、printに入れなくても見れますね。

```
>>> pprint.pprint.__doc__
'Pretty-print a Python object to a stream [default is sys.stdout].'
```

#pydoc
コメントで、pydocというのがあると教えて頂きました。
htmlとかでも吐き出せます。
※ただし、個人的には、デザイン（配色）とかが、ちょっと、好みではなかったです（つまらないことが気になるのが。。。欠点です、ワタシは。）
numpyとかも一気にドキュメントがつくられました。。。凄すぎる。

#pydocがうまく動かない場合
何か機能提供しているモジュールとかの場合は、そのモジュールがもつヘルプを表示させるのが、無難な気もします。

***-h, --help***

とかで、だいたい、でるんですかね。
（先ほど、pydocがうまく動作しないモジュールがあったため。当然、pydocが悪いわけではないですが。。。現実的な対処として。。。）

#まとめ

\_\_doc\_\_とhelp、どちらでもいいが、helpのほうがいい気がしました。
わずかな差でもシンプルが好きな人は、\_\_doc\_\_がいいかも。

※ただ、ワタシの環境では、help(numpy)とうつと、張り切って何かだそうとして、エラーになって、2回目に成功しました。helpは沢山だそうとするので、注意が必要かも？

※　__doc__は、\\_\\_doc\\_\\_（こんなにはいらないかもしれませんが、）「\\」を入れてmarkdownを逃げる必要あり。。

#関連（本人）
[pythonをストレスなく使う！（Pythonでは、すべてがオブジェクトとして実装されている)](https://qiita.com/enoughspacefor/items/0c6118da4c228226a65f)
[pythonをストレスなく使う！（Pylintに寄り添う)](https://qiita.com/enoughspacefor/items/df692b27bb58ca1ffa1d)
[pythonをストレスなく使う！（ExpressionとStatement)](https://qiita.com/enoughspacefor/items/1a11f553c265a2c703f2)
[英語と日本語、両方使ってPythonを丁寧に学ぶ。](https://qiita.com/enoughspacefor/items/d4b49747773e2d0285f9)

#今後
コメントなどあれば、お願いします。:candy:
勉強します、、、、

#残件

##残件【1】
以下の記載が上記にあるが、具体的に、それはなんというモジュールで、
どう動作しないのかが、いつも気になる。

>（先ほど、pydocがうまく動作しないモジュールがあったため。