42

Python の docstring とコメントの違いについて少し混乱しています。

私のクラスで、私の先生は「デザイン レシピ」として知られるものを紹介しました。これは、学生が Python でコーディングをより適切にプロットして整理するのに役立つと思われる一連の手順です。私が理解していることから、以下は私たちが従う手順の例です-これはいわゆるデザインレシピ(引用符内のもの)です:

def term_work_mark(a0_mark, a1_mark, a2_mark, ex_mark, midterm_mark):

    ''' (float, float, float, float, float) -> float

    Takes your marks on a0_mark, a1_mark, a2_mark, ex_mark and midterm_mark, 
    calculates their respective weight contributions and sums these 
    contributions to deliver your overall term mark out of a maximum of 55 (This
    is because the exam mark is not taken account of in this function)

    >>>term_work_mark(5, 5, 5, 5, 5)
    11.8
    >>>term_work_mark(0, 0, 0, 0, 0)
    0.0
    '''

    a0_component = contribution(a0_mark, a0_max_mark, a0_weight)
    a1_component = contribution(a1_mark, a1_max_mark, a1_weight)
    a2_component = contribution(a2_mark, a2_max_mark, a2_weight)
    ex_component = contribution(ex_mark, exercises_max_mark,exercises_weight)
    mid_component = contribution(midterm_mark, midterm_max_mark, midterm_weight)
    return (a0_component + a1_component + a2_component + ex_component + 
            mid_component)

私が理解している限り、これは基本的に docstring であり、私たちのバージョンの docstring では、説明、Python シェルに入力した場合に関数が何をすべきかの例、および「型コントラクト」の 3 つを含める必要があります。入力した型と関数が返す型を示すセクション。

これですべてが完了しましたが、割り当てには、トークン '#' 記号を使用して、関数の性質を説明するコメントも必要です。

ですから、私の質問は、docstring の説明セクションで関数が何をするかを既に説明していませんか? 基本的にまったく同じことを読者に伝えている場合、コメントを追加する意味は何ですか?

4

4 に答える 4

47

あなたの先生は How to Design Programs のファンのようです ;)

私はこれを、常に重複するとは限らない 2 人の異なる聴衆に向けて書いているものとして取り組みたいと思います。

まず、docstring があります。これらは、コードがどのように機能するかを必要とせずに、または知りたくなくても、コードを使用しようとしている人向けです。Docstring は実際のドキュメントに変換できます。公式の Python ドキュメントを検討してください - 各ライブラリで利用できるものとその使用方法、実装の詳細はありません (使用に直接関係しない限り)

次に、コード内コメントがあります。これらは、コードを拡張したい人々 (通常はあなた!) に何が起こっているかを説明するためのものです。これらは実際には使用法ではなくコード自体に関するものであるため、通常はドキュメントにはなりません。現在、プログラマーの数と同じくらい多くの意見が、良いコメント (またはコメントの欠如) の理由についてあります。コメントを追加するための私の個人的な経験則は次のとおりです。

  • 必然的に複雑になるコードの部分。(最適化が頭に浮かぶ)
  • 非論理的に見える可能性がある、制御できないコードの回避策
  • TODOも認めますが、最小限に抑えるようにしています
  • そのセクションのパフォーマンスが後で重要になった場合に、よりパフォーマンスの高い(ただしより複雑な)オプションを使用できる、より単純なアルゴリズムを選択した場所

あなたはアカデミックな環境でコーディングを行っており、講師は冗長な内容を求めているように聞こえるので、そのままでいいと思います。コード コメントを使用して、設計レシピで行っていることをどのように行っているかを説明します。

于 2013-09-29T08:34:47.377 に答える