今回も引き続き、関数に説明を添える方法の一つであるアノテーションについて解説いたします。
アノテーションとは
アノテーションとは日本語で注釈という意味で各種言語では変数などにタグを付け加えるための役割を持つものです。Pythonでは関数の引数および戻り値に情報を付け加えることができます。アノテーションに記載する内容ですが、普通の文字列等も記載できますが基本的にはデータ型をアノテーションに記載して、引数でどの型を想定しているかというのを記載するのが一般的です。
アノテーションの書き方
アノテーションは関数の定義の際に記載するものですが、引数のアノテーションと戻り値のアノテーションがありますのでそれぞれ確認します。
引数のアノテーション
引数のアノテーションは引数の後ろに : (コロン)をつけてそこにアノテーションの内容を記載します具体的には以下の通りです。
戻り値のアノテーション
戻り値のアノテーションは引数の定義領域の後ろ、最後の : (コロン) の前に “->“をつけてそこにアノテーションの内容を記載します。具体的には以下の通りです。
アノテーションは記載方法を記述するものなのでなくてもエラーになりません。また、一部の引数だけアノテーションを記載して一部の引数は記載しない、引数は記載せず戻り値のアノテーションだけつけるといったことも可能です。また、アノテーションを付与することで型チェックをしてくれるといったものでもありません。ただ、わかりやすくするだけです。
そのため、あってもなくても良いですがなるべく記載したほうが親切ではあると思います。
一点注意点としてはPython3.6以前では使えないようですので、バージョンには注意しなくてはなりません。開発環境でアノテーションありで実装したけど本番環境がPython3.5以前の環境だった!なんてことになったら関数の定義全部直さなきゃいけません。他の言語でもそうですが、Pythonは特に注意しましょう。
アノテーションありの関数の例
最後にアノテーションを使った関数を確認しましょう。
1 2 3 4 5 6 7 |
def kaekList(anylist : list, num:int ) -> list: """リスト中身を渡した数値分乗算する関数です""" resultlist = list(map(lambda lamnum : lamnum * num , anylist)) return resultlist listSome = [4 , 8 , "word" , "txt"] print(kaekList(listSome , 3)) |
アノテーションをつけて、さらに前回説明したdocstringをつけてみました。アノテーションまでつけるならdocstringもつけるのが締まりがいい気がするので両方つけるのを心がけるとよいかもしれません。
内容はラムダ式を使用した関数です。ラムダ式だと構文を覚えていないと何しているか一見してわからなくなりがちなので、それぞれ説明をつけて呼び出す際にわかりやすいようにしました。実際上の関数を見てなんだかわからない場合はラムダ式の内容を見直してみてください。ほとんど同じコードです。
なおColabで上記の関数の呼び出しにマウスオーバーすると以下のようになります。
Colabではアノテーションの内容を表示しているだけですが、使用するIDEによっては予測変換に使われたりするようですので、環境によってはより便利に感じるかもしれません。
今回はここまでです。
お疲れ様でした。
コメント