GrammarPrPython

【Python】関数アノテーションの使い方

Pythonは関数アノテーションという機能を使って、関数の引数や返り値にアノテーションを記載できます。これを使うことによって、使用方法をより明確化できます。本記事では関数アノテーションの書き方および注意点について解説します。

アノテーションは「注釈」という意味です。

スポンサーリンク

関数アノテーションの書き方

関数アノテーションの書き方について解説します。以下の関数を使用します。

この関数に対して関数アノテーションを記載します。

引数アノテーションは引数名の後にコロンを続け、その後にアノテーションの値として評価される式を置きます。

返り値アノテーションは、引数リストとdef文の終わりを表すコロンの間に置かれた -> によって定義され、その後に式が続きます。戻り値が無い場合はNoneと書きます。

今回は関数アノテーションに型ヒントを記載していますが、型ヒントを書くことは必須ではなく、それ以外の情報をアノテーションとして書くことも認められています。

また、引数にデフォルト値を設定したい場合は引数アノテーションの後に続けます。

関数アノテーションおよび型ヒントの詳細はPEP484に記載があります。PEPとはPython Enhancement Proposals(Python機能強化の提案)の略で、Pythonコミュニティに情報を提供したり、新機能を説明したりする設計文書です。

スポンサーリンク

使用する際の注意点

使用する際の注意点などを解説します。

アノテーションで指定した型以外の引数を渡してもエラーにならない

関数アノテーションは注釈に過ぎないため、アノテーションで指定した型以外の引数を渡してもエラーになりません。

__annotations__の属性にディクショナリとして格納される

関数アノテーションは以下のように__annotations__属性にディクショナリとして格納されます。

スポンサーリンク

ジェネリックな関数

PythonはTypeVarという機能があり、呼び出し時に型が決まる汎用的(ジェネリック)な関数を作成することができます。

つまり、引数x,yの型がTであるとき、返り値の型がTであるということです。

python3.12の変更点

python3.12より、TypeVarなしでジェネリックな関数を記述できるようになりました。

ジェネリックについてもう少し(主題から逸れます)

python3.12で変更があったのは関数だけではなく、クラスにも変更があります。主題とは逸れますがあわせてご紹介します。

まず、クラスの継承は以下のようにできますが、

構文

class ClassName(BaseClassName):

python3.11以前のバージョンでは、Generic[T]を基底クラスにすることでジェネリックなクラスを定義することができました。

python3.12ではクラス名[型変数]でジェネリックなクラスを定義できるようになり、書き方がシンプルになりました。

その他の変更点を知りたい方はこちらをご確認ください。

スポンサーリンク

まとめ

関数アノテーションはあくまで注釈ですが、関数の使い方をより分かりやすくすることができます。Pythonコードの可読性向上に活用しましょう。

関連記事
【Python】位置専用引数とキーワード専用引数の使い方
【Pythonの可変長引数】*args、**kwargsの違いと使い方を徹底解説!
【入門者向け】効率よくPythonを習得する3Step

コメント

タイトルとURLをコピーしました