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で変更があったのは関数だけではなく、クラスにも変更があります。主題とは逸れますがあわせてご紹介します。
まず、クラスの継承は以下のようにできますが、
python3.11以前のバージョンでは、Generic[T]を基底クラスにすることでジェネリックなクラスを定義することができました。
python3.12ではクラス名[型変数]でジェネリックなクラスを定義できるようになり、書き方がシンプルになりました。
その他の変更点を知りたい方はこちらをご確認ください。
まとめ
関数アノテーションはあくまで注釈ですが、関数の使い方をより分かりやすくすることができます。Pythonコードの可読性向上に活用しましょう。
また、PythonEDに問題が掲載されているので、理解度を深めたい方は是非挑戦してみてください。
関連記事
【Pythonの可変長引数】*args、**kwargsの違いと使い方を徹底解説!
Pythonには
実力を証明できる資格があります
PythonにはPython3エンジニア認定基礎試験という試験があります。
試験範囲がPythonチュートリアル(公式ドキュメント)となっているため、Pythonの基礎を全て押さえることができます。
- 独学で勉強していて、どれくらい理解できているのか調べたい
- 今の仕事も続けつつ、キャリアの幅を広げたい
- 新しい技術としてPythonを習得したい
そんな方は是非詳細をご確認ください。
おすすめ記事
【入門者向け】効率よくPythonを習得する3Step
【難易度爆下げ】Python3エンジニア認定基礎試験 公式問題集レビュー
【Python3エンジニア認定基礎試験】合格体験記からみんなの勉強方法を探ってみた
コメント