web-dev-qa-db-ja.com

Python 3スクリプトのprint(__ doc__)

このScikitの例 のように、スクリプトの先頭でprint(__doc__)が何をするのかわかりません。

私はグーグルでPython docstringsを探していましたが、__doc__は関数などのドキュメントを提供するのに役立つようです。しかし、スクリプトの途中で__doc__が何をするのかわかりません。

44
Tanguy

__doc__は、たとえば関数でいくつかのドキュメントを提供するのに役立つようです

これは本当です。機能に加えて、ドキュメントをモジュールで提供することもできます。したがって、次のようなmymodule.pyという名前のファイルがある場合:

"""This is the module docstring."""

def f(x):
    """This is the function docstring."""
    return 2 * x

次のようにそのdo​​cstringにアクセスできます。

>>> import mymodule
>>> mymodule.__doc__
'This is the module docstring.'
>>> mymodule.f.__doc__
'This is the function docstring.'

さて、質問に戻ります:print(__doc__)は何をしますか?簡単に言えば、モジュールのdocstringを出力します。 docstringが指定されていない場合、__doc__のデフォルトはNoneになります。

72

文字列リテラルで始まる関数、クラス、またはモジュールには空でない__doc__があります。その初期文字列はドキュメント文字列として扱われます。そのような文字列が存在しない場合、Noneに設定されます。 Python用語集の docstring用語定義 を参照してください。

そのScikitスクリプトの例をダウンロードすると、次のような文字列で始まることがわかります。

"""
================================
Recognizing hand-written digits
================================

An example showing how the scikit-learn can be used to recognize images of
hand-written digits.

This example is commented in the
:ref:`tutorial section of the user manual <introduction>`.

"""

print(__doc__)コマンドは、スクリプトおよびその他のpythonツール(インタラクティブインタープリターhelp()関数など)を実行するたびに、ドキュメント文字列を単に再利用して端末に書き込みます。たとえば)同じ値を内省できます。

16
Martijn Pieters