Pythonで関数にコメントする適切な方法は何ですか?


174

Pythonで関数にコメントする一般的に受け入れられている方法はありますか?以下は許容されますか?

#########################################################
# Create a new user
#########################################################
def add(self):

回答:


318

それを行う正しい方法は、docstringを提供することです。そうhelp(add)すれば、コメントも吐き出されます。

def add(self):
    """Create a new user.
    Line 2 of comment...
    And so on... 
    """

これは、コメントを開くための3つの二重引用符と、コメントを終了するための3つの二重引用符です。有効なPython文字列を使用することもできます。複数行である必要はなく、二重引用符を単一引用符で置き換えることができます。

参照:PEP 257


10
三重引用符で囲む必要はないことに注意してください。任意の文字列リテラルが機能します。ただし、複数行の文字列により多くの情報を含めることができます。
Ignacio Vazquez-Abrams

5
ただし、慣例により、三重引用符で囲む必要があると規定されています。私はそうではなかったdocstringを見たことがありません。
Chinmay Kanchi

2
私が同意しないと言っているのではありません。それらは三重引用符で囲まれる必要がありますが、実際にはそうでないものもあります。
jcdyer

7
(3つの二重引用符ではなく)3つの単一引用符を使用して、docstringを開いたり閉じたりすることもできます。
Craig McQueen

コメントもインデントしないでください。
joctee 14

25

他の人がすでに書いているように、docstringを使用してください。

さらに一歩進んで、doctestにdoctestを追加して、関数の自動テストを簡単にすることもできます。


3
この答えは、リンク先のページをたどらないとかなり弱いです。
xaxxon

18

docstringを使用します。

モジュール、関数、クラス、またはメソッド定義の最初のステートメントとして出現する文字列リテラル。このようなdocstringは、__doc__そのオブジェクトの特別な属性になります。

すべてのモジュールには通常docstringが必要であり、モジュールによってエクスポートされるすべての関数とクラスにもdocstringが必要です。パブリックメソッド(__init__コンストラクターを含む)にもdocstringが必要です。パッケージは__init__.py、パッケージディレクトリ内のファイルのモジュールdocstringに文書化できます。

Pythonコードの他の場所にある文字列リテラルも、ドキュメントとして機能する場合があります。これらはPythonバイトコードコンパイラでは認識されず、ランタイムオブジェクト属性としてアクセスできません(つまり、に割り当てられていません__doc__)。ただし、ソフトウェアツールによって2種類の追加のdocstringが抽出される場合があります。

  1. モジュール、クラス、または__init__メソッドの最上位の単純な割り当ての直後に発生する文字列リテラルは、「属性docstrings」と呼ばれます。
  2. 別のdocstringの直後に出現する文字列リテラルは、「追加のdocstrings」と呼ばれます。

属性と追加のdocstringの詳細な説明については、PEP 258「Docutils Design Specification」[2]を参照してください...


10

良いコメントの原則はかなり主観的ですが、ここにいくつかのガイドラインがあります:

  • 関数のコメントは、実装ではなく関数の意図を説明する必要があります
  • 関数がシステム状態に関して行うすべての仮定の概要を説明します。グローバル変数(tsk、tsk)を使用する場合は、それらをリストします。
  • 過剰なASCIIアートに注意してください。ハッシュの文字列が長いと、コメントが読みやすくなりますが、コメントが変更されたときに対処するのが面倒です。
  • 「自動ドキュメンテーション」を提供する言語機能、つまり、Pythonのdocstring、PerlのPOD、JavaのJavadocを利用する

7
これについて主観的なものは何もありません。Pythonは、Docstringコメントを使用することについて非常に明確です。

@fuzzy lollipop、コメントに感謝しますが、私の最後のポイントが正確なポイントであることに気付くでしょう。おそらく、OPの質問はPythonでのコメントのメカニズムだけに関するものですが、私の回答が反対投票を
正当化

7

Pythonコードでのdocstringsの使用について読んでください。

Python docstring規約に従って:

関数またはメソッドのdocstringは、その動作を要約し、その引数、戻り値、副作用、発生した例外、およびいつ呼び出すことができるかの制限(該当する場合はすべて)を文書化する必要があります。オプションの引数を指定する必要があります。キーワード引数がインターフェースの一部であるかどうかを文書化する必要があります。

黄金律はありませんが、チームの他の開発者(もしあれば)や、6か月後に戻ってきたときに自分自身に何かを意味するコメントを提供します。


5

Sphinxなどのドキュメンテーションツールと統合するドキュメンテーションプラクティスに行きます。

最初のステップは、使用することですdocstring

def add(self):
 """ Method which adds stuff
 """

2

「docstringを使用してください」と言うだけではなく、さらに一歩進んでいきます。pydocやepydocなどのドキュメント生成ツール(私はpyparsingでepydocを使用しています)を選択し、そのツールで認識されるマークアップ構文を使用します。開発中にツールを頻繁に実行して、ドキュメントの穴を特定します。実際、クラス実装するに、クラスのメンバーのdocstringを作成することでメリットを得ることもできます。


2

docstringsを使用します。

これは、PyCharmに組み込まれている、関数の説明コメントに関する推奨される規則です。

def test_function(p1, p2, p3):
    """
    my function does blah blah blah

    :param p1: 
    :param p2: 
    :param p3: 
    :return: 
    """

それはインデントされるべきではありませんdefか?(修辞的な質問ではありません。)
Peter Mortensen


0

それには、3つの引用符を使用できます。

一重引用符を使用できます。

def myfunction(para1,para2):
  '''
  The stuff inside the function
  '''

または二重引用符:

def myfunction(para1,para2):
  """
  The stuff inside the function
  """
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.