Python - Docstrings

こんにちは、Pythonプログラマー志願者の皆さん!今日は、素晴らしいDocstringsの世界に飛び込んでいきましょう。あなたの親しみのある近所のコンピュータサイエンスの先生として、私はPythonプログラミングのこの重要な側面を案内することが楽しみです。だから、お気に入りの飲み物を持って、快適に座り、一緒にこの学びの冒険に出よう!

Python - Docstrings

PythonのDocstrings

日记を書くことを想像してみてください。それぞれのエントリの最初に、その日に何が起こったかの簡単な概要を書き留めるかもしれません。PythonのDocstringsもあたかもそれと似ています!それらは、コードが何をしているかを説明する特別な文字列で、あなた(および他の人々)が後でコードを理解するのを容易にします。

Pythonでは、Docstringsは三重引用符("""または''')で囲まれ、関数、クラス、またはモジュールの定義直後に配置されます。簡単な例を見てみましょう:

def greet(name):
"""この関数は、引数として渡された人に挨拶します"""
print(f"こんにちは、{name}!")

この例では、三重引用符の間の行が私たちのDocstringです。それは、greet関数が何をしているかを簡単に説明しています。

単一行のDocstrings

簡単な関数やクラスでは、単一行のDocstringで十分です。別の例を見てみましょう:

def square(n):
"""数の平方を返します。"""
return n ** 2

このDocstringは短くて甘い、関数が何をしているかをちょうど一行で伝えます。

複数行のDocstrings

より複雑な関数やクラスでは、複数行のDocstringが必要かもしれません。これらは通常、要約行に続けて空行と詳細な情報を含みます。例を見てみましょう:

def calculate_area(length, width):
"""
長方形の面積を計算します。

パラメータ:
length (float): 長方形の長さ
width (float): 長方形の幅

戻り値:
float: 長方形の面積
"""
return length * width

この複数行のDocstringは、関数のパラメータと戻り値について詳細な情報を提供します。

モジュールのDocstrings

モジュールにもDocstringsがあります!これらはファイルの最初に配置されます。例を見てみましょう:

"""
このモジュールには、幾何計算のためのユーティリティ関数が含まれています。
これには、さまざまな図形の面積と体積を計算する関数が含まれています。
"""

def calculate_circle_area(radius):
# 関数の実装はここにあります

クラスのDocstrings

クラスもDocstringsを持ちます。これらはクラス定義の直後に配置されます:

class Rectangle:
"""
長方形を表すクラス。

属性:
length (float): 長方形の長さ
width (float): 長方形の幅
"""

def __init__(self, length, width):
self.length = length
self.width = width

Docstringsへのアクセス

Docstringsの素晴らしいところの一つは、プログラムでアクセスできることです。Pythonは、関数、クラス、またはモジュールのDocstringを__doc__属性として保存します。以下はそのアクセス方法です:

def greet(name):
"""この関数は、引数として渡された人に挨拶します"""
print(f"こんにちは、{name}!")

print(greet.__doc__)

これは次のように出力します:この関数は、引数として渡された人に挨拶します

Docstringsの書き方のベストプラクティス

Docstringsの書き方を知った今、いくつかのベストプラクティスについて話しましょう:

  1. 簡潔でありながら情報が豊富
  2. 正しい文法と句読点を使用
  3. スタイルを一貫させる
  4. 関数についてはパラメータと戻り値についても含める
  5. クラスについては重要な属性とメソッドを説明する

GoogleスタイルのDocstring

Googleには独自のスタイルガイドがあります。以下はその例です:

def divide(a, b):
"""二つの数を割ります。

Args:
a (int): 被除数。
b (int): 除数。

Returns:
float: 割り算の結果。

Raises:
ZeroDivisionError: bが0の場合。
"""
if b == 0:
raise ZeroDivisionError("0で割ることはできません")
return a / b

NumPy/SciPyスタイルのDocstring

科学のPythonライブラリで働いている場合、NumPy/SciPyスタイルを見つけることができます:

def calculate_mean(numbers):
"""
リストの数の算術平均を計算します。

Parameters
----------
numbers : list
数のリスト。

Returns
-------
float
入力リストの算術平均。
"""
return sum(numbers) / len(numbers)

SphinxスタイルのDocstring

SphinxはPython用の人気のあるドキュメント生成ツールです。そのスタイルはreStructuredTextフォーマットに似ています:

def fibonacci(n):
"""
nまでのFibonacci数列を生成します。

:param n: 生成するFibonacci数の数
:type n: int
:return: Fibonacci数のリスト
:rtype: list
"""
sequence = [0, 1]
while len(sequence) < n:
sequence.append(sequence[-1] + sequence[-2])
return sequence[:n]

Docstringとコメントの違い

"Docstringと通常のコメントの違いは何か?"とお気づきでしょうか。素晴らしい質問です!それを解説してみましょう:

  1. 構文:Docstringsは三重引用符を使用し、コメントは#を使用します。
  2. 配置:Docstringsは定義直後にあり、コメントはどこにでもあります。
  3. 目的:Docstringsはコードが何をしているかを説明し、コメントはそれがどのように行われているかを説明します。
  4. アクセス:Docstringsはプログラムでアクセスでき、コメントはアクセスできません。

以下はその例です:

def add(a, b):
"""
二つの数を足し、結果を返します。
"""
# これは加算を行う方法を説明するコメントです
return a + b  # これはインラインコメントです

それでは、PythonのDocstringsについての紹介はここまでです。覚えておいてください、良いドキュメントは未来のあなた(または他の開発者)が追いかけるためのパンを残すことです。今は余計な仕事に見えるかもしれませんが、信じてください、後で感謝することでしょう!

以下は、私たちがカバーしたDocstringスタイルの簡易リファレンス表です:

スタイル 概要
単一行 簡単な一行の説明 """数の平方を返します。"""
複数行 パラメータと戻り値を含む詳細な説明 """長方形の面積を計算します。\n\nパラメータ:\n..."""
Google Args、Returns、Raisesセクションを含む """二つの数を割ります。\n\nArgs:\n..."""
NumPy/SciPy ParametersおよびReturnsセクションを使用し、より詳細なフォーマット """リストの数の算術平均を計算します。\n\nParameters\n----------\n..."""
Sphinx :param:、:type:、:return:、:rtype:フィールドを使用 """nまでのFibonacci数列を生成します。\n\n:param n: ..."""

コーディングの幸せを祈って、あなたのDocstringsがいつも明確で情報が豊富であることを!

Credits: Image by storyset