coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

SimplePrograms で Python を学ぶ + LINE AI アシスタントで doctest を調べる

2024-06-07 22:17:08 | Python
前回の14番目のプログラムで出てきた doctest をもう少し知りたいと思いました。そのため、以前も試した LINE の機能でその後正式に公開されたサービス「LINE AI アシスタント」を利用してみます。
質疑応答は以下の通りです。(Q:質問、A:回答です。)
------- ここから
Q1:
Python の doctest の使い方を初心者に説明するにはどのようにすればよいのでしょうか。
A1:
Python の doctest
モジュールは、コード内のコメントとして書かれたテストケースを実行するためのツールです。初心者向けに説明するために、以下のステップに従ってください。

### 1. doctest の基本概念
doctest は、Python のドキュメンテーション文字列(docstring)に書かれた例を実行して、その出力が期待される結果と一致するかどうかを確認します。これにより、コードの動作を簡単にテストできます。

### 2. 簡単な例
まず、簡単な関数とその docstring にテストケースを追加してみましょう。

```  python
def add(a, b):
    """
    2つの数値を加算します。

    >>> add(2, 3)
    5
    >>> add(-1, 1)
    0
    """
    return a + b
```

### 3. doctest の実行
次に、このテストを実行する方法を説明します。以下のコードを追加して、スクリプトを実行します。

```  python
if __name__ == "__main__":
    import doctest
    doctest.testmod()
```

これにより、doctest は docstring 内のテストケースを実行し、結果を確認します。

### 4. 実行結果の確認
スクリプトを実行すると、テストが成功した場合は何も表示されません。エラーがある場合は、どのテストが失敗したかが表示されます。

### 5. 追加のヒント
- 複数行の出力をテストする場合は、`>>>` の後に改行を入れて続けて書きます。
- 例外が発生することをテストする場合は、`>>>` の後に例外を記述します。


```  python
def divide(a, b):
    """
    2つの数値を除算します。

    >>> divide(6, 3)
    2.0
    >>> divide(1, 0)
    Traceback (most recent call last):
       ...
    ZeroDivisionError: division by zero
    """
    return a / b
```

### まとめ
doctest は、コードのドキュメンテーションとテストを一体化する便利なツールです。初心者でも簡単に使えるので、ぜひ試してみてください。
ここまで----------

この場合、三重クオートは docstring というのですね。生成された例を実行してみます。最初が test00.py 2番目が test01.py の各ファイルにしました。

$ python3 ./test00.py
$

docstring 通りに動作するので何も表示されないのですね。そこで、docstring の中をわざと次のように変更して、test00-2.py を作成します。
    >>> add(2, 3)
    4
    >>> add(-1, 1)
    1

$ python3 ./test00-2.py
**********************************************************************
File "./test00-2.py", line 5, in __main__.add
Failed example:
    add(2, 3)
Expected:
    4
Got:
    5
**********************************************************************
File "./test00-2.py", line 7, in __main__.add
Failed example:
    add(-1, 1)
Expected:
    1
Got:
    0
**********************************************************************
1 items had failures:
    2 of 2 in __main__.add
***Test Failed*** 2 failures.
$

テストとなる部分以外は日本語が使えるようです。

生成された2番目の例を実行すると、

$ python3 ./test01.py
$

docstring 通りで、ちゃんとエラーになる場合も確認できるようですね。

さらに docstring について質問してみます。
------- ここから
Q2:
この回答に出てくる docstring は、初心者に馴染みが無いように思います。docstring を分かりやすく説明してください。
A2:
もちろんです。docstring(ドックストリング)は、Python の関数、クラス、モジュールなどに対する説明文を記述するための特別な文字列です。初心者向けに分かりやすく説明しますね。

### 1. docstring とは?
docstring は、関数やクラスの最初に書かれる文字列で、その機能や使い方を説明します。これにより、コードを読む人がその関数やクラスが何をするものかを理解しやすくなります。
### 2. docstring の書き方
( 省略 )
### 3. docstring の利点
- **コードの可読性向上**: 他の開発者がコードを理解しやすくなります。
- **自動ドキュメント生成**: Sphinx などのツールを使って、自動的にドキュメントを生成できます。
- **インタラクティブシェルでのヘルプ**: `help()` 関数を使って、docstring を簡単に表示できます。
( 以下省略 )
ここまで----------

つまり、
>>> help(関数名)
と help()関数を使うと、docstring の内容を表示してくれるようです。

更に次の質問をしてみました。
------- ここから
Q3:
この説明によると、python で関数を作るときには、通常のプログラミング言語のコメントの代わりにdocstringで説明するコメントをいれるべきだと思いますが、python 入門時に一般的な話でしょうか?
A3:
Python の入門時に docstring を使うことは非常に一般的であり、推奨されるベストプラクティスの一つです。以下にその理由を詳しく説明します。

### 1. Python の哲学
Python には「明示的は暗黙的に勝る」という哲学があります。これは、コードが何をしているのかを明確にすることが重要であるという考え方です。docstring はこの哲学に沿ったもので、関数やクラスの動作を明示的に説明する手段となります。

### 2. 初心者にとっての利点
- **理解しやすさ**: docstring を使うことで、関数やクラスの目的や使い方が明確になります。これにより、初心者でもコードを理解しやすくなります。
- **学習の一環**: docstring を書く習慣を早い段階で身につけることで、後々の開発においても役立ちます。

### 3. コメントとの違い
通常のコメント(`#` で始まる行)は、コードの特定の部分についての短い説明を提供するために使われます。一方、docstring は関数やクラス全体の説明を提供するために使われます。
( 省略 )
### 4. docstring の標準
Python には、docstring の書き方に関する標準的なガイドラインがあります。例えば、PEP 257 というドキュメントがあり、docstring の書き方について詳しく説明しています。これに従うことで、統一感のあるドキュメントを作成できます。

### 5. 実際の開発での利用
実際の開発現場では、docstring は非常に重要です。特に大規模なプロジェクトやチーム開発においては、docstring があることで他の開発者がコードを理解しやすくなります。また、自動ドキュメント生成ツールを使う際にも docstring は必須です。

### まとめ
Python の入門時に docstring を使うことは非常に一般的であり、推奨されるベストプラクティスです。docstring を使うことで、コードの可読性が向上し、他の開発者や将来の自分にとっても理解しやすいコードを書くことができます。ぜひ、関数やクラスを書く際には docstring を活用してみてください。
ここまで----------

Python では、関数やクラスを作成するときに docstring を使う事がとても大切だと思いました。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする