Pythonインタラクティブガイド - ステップ3 関数 (2) - 関数の基本 (2)
- 本講座「Pythonインタラクティブガイド」は、手を動かしながらPythonプログラミングの基礎を学べるインタラクティブな講座です。
- 「スタイルガイド」では、Pythonで読みやすくきれいなコードを書くためのガイドライン(PEP8)を主に紹介しています。
- 各コード例はその場で実行して結果を確認できます。
ページ再読み込みで元に戻るので、自由に試してみてください。
「ステップ3 関数」の続きです。
3.1. 関数の基本
3.1.4. パラメータと引数
関数に値を渡すために使用するのがパラメータと引数です。
- パラメータ(parameter): 関数を定義するときに指定する変数
- 引数(argument): 関数を呼び出すときに渡す実際の値
前回の練習問題で作成した関数を、リストをパラメータで受けて最小値と最大値を返す関数に改修しましょう。
解答例
引数の指定
関数を呼び出すには、すべてのパラメータに対する引数を指定する必要があります:
引数が足りない場合
必要な引数の指定が足りていない場合、TypeError
が発生します:
引数が多い場合
引数を余分に指定している場合も TypeError
が発生します:
位置引数とキーワード引数
引数は、関数の呼び出し時に <パラメータ>=<引数>
という形で指定することも可能です:
- このように指定する引数のことを、 キーワード引数 (keyword argument) といいます
- 逆に通常の引数のことを、 位置引数 (positional argument) といいます
キーワード引数の場合、指定順序を変更可能です:
位置引数とキーワード引数を混在することも可能です
ただし、キーワード引数は位置引数より後ろで指定する必要があります
デフォルト引数
関数の定義時に <パラメータ>=<引数>
のように指定して、パラメータのデフォルト引数を設定できます。
デフォルト引数の設定があるパラメータは、関数呼び出し時に引数の指定を省略することができます。
デフォルト引数の設定があるパラメータの後にデフォルト引数なしのパラメータを使用することはできません。
そのため、パラメータのデフォルト引数を設定する場合は、
後続のすべてのパラメータのデフォルト引数も設定するか、パラメータの順序を変更する必要があります。
次のプログラムの出力を予想してから実行してみましょう:
実行結果は、 1を追加: [1]
, 2を追加: [2]
ではなく、1を追加: [1]
, 2を追加: [1, 2]
となります。
このような動作をするのは、デフォルト引数は関数定義時に作成されて、以降同じオブジェクトが使用されるためです:
このような意図しない動作を防ぎ、デフォルト値としてミュータブルな値を使用したい場合は、
デフォルト引数をNone
に設定して、None
の場合にその値に変換する処理を関数内に追加しましょう:
2つの集合を入力して、その和集合のサイズを返す関数を作成しましょう。
ただし、2つ目の集合は省略可能で、省略された場合は1つ目の集合のサイズを返すようにします。
また、実際に使用して正しく動作するか検証してみましょう。
解答例
3.1.5. docstring (ドキュメント文字列)
関数の定義の直後に、三重引用符("""
)で囲まれた文字列を記述することで、関数の説明を記述できます。
この文字列のことを docstring (ドクストリング, ドキュメント文字列)といいます。
- docstringを書くと、以下のようなメリットがあります:
- 関数の使い方を明示できる
- VSCode等のエディタのマウスオーバー表示で説明が見えるようになる
- 自動ドキュメント生成ツール(Sphinxなど)で関数のドキュメントを自動生成できる
Pythonでは、docstringの書き方にいくつかのスタイルがあります。以下に代表的な3つを紹介します。
1. Googleスタイル
シンプルで読みやすく、Googleが推奨するフォーマットです。
2. NumPyスタイル
科学計算系のライブラリでよく使われるフォーマットです。
3. reStructuredText(Sphinx)スタイル
Sphinxなどのドキュメント生成ツールと相性の良いスタイルです。
どれを使えばいいの?
どのスタイルでも問題ありませんが、チームやプロジェクトで統一することが重要です。
最初はGoogleスタイルから始めると良いでしょう。
より詳しく知るには
docstringに関する詳しい解説は以下を参照してください:
前回の練習問題で作成した関数のdocstringを作成しましょう。
上記の3つのスタイルのうちいずれかを使用してください。