Pythonのアノテーションとは?使い方とメリット

わかりやすくPythonのアノテーションの使い方とメリットを解説。アノテーションを使うと型を明示できて、コーディングでのミスやエラーを減らせる

今回はPythonにおける「型明示」機能を提供するアノテーション(annotation)について解説します。

英語のannotationの意味

annotationは英語で、その日本語の意味は注釈です。何かの補足説明となるようなちょっとしたメモという感じでしょうか。

この点、Pythonでは「オブジェクトの型を明示するための注釈」という機能を果たします。

それでは次項で基本的な使い方を見ていきましょう。

Pythonのアノテーションの使い方

個人が趣味程度でPythonを使ってプログラムを作る場合にはいちいち型を明示してから変数を宣言するということは少ないと思います。

しかしPythonにも型という概念は存在しますし、型が一致していないと処理中にエラーが出ます。

そこで型を明示したほうがプログラム作業でミスやエラーが少なくなるでしょう。そのために、Pythonではバージョン3以降、アノテーションという機能が加わりました。その言葉の意味は上で書いた通りです。

では、さっそく使い方を見ていきましょう。

変数を宣言する場合の使い方

まず単純に変数を宣言して代入する文の場合の使い方は次のとおりです。

a:str='Tom'

この場合の使い方については下の画像を見て下さい。

Pythonのアノケーションの使い方の解説

このように代入文の左辺で変数を宣言する際、その変数の直後に「: 型」と書くだけです。

今回のコードでは、代入するデータがTomという文字列なので、変数aも文字列型、つまりstrです。よってstrと書いています。整数型ならint、リスト型ならlist、辞書型ならばdictなどと指定しましょう。

次に関数を定義して引数で使う場合を見てみましょう

関数定義の引数で使う場合

まずテキトーにこんな関数を作ってみました。

def fnc_say_hello(name: str) -> str:
    return name+'さん、こんにちは'


fnc_say_hello('田中')

この場合の使い方についても下の画像を見てください。

Pythonのアノケーションの使い方の解説

この画像の黄色□で囲ったところが2つあり、それが使い方のポイントが2つあることを示しています。

1つ目は上述「変数を宣言する場合の使い方」で書いたように、引数で使われる変数nameのすぐ横に「:型」と書くことです。ここは仮引数nameの型を明示しています。もちろん実引数である「田中」という文字列も文字列型ですので、お互いの型は一致しています。

もう1つは、仮引数を書き終えたあとに、「->」と「型」を使っていることです。この部分は、その関数の実行結果の返り値(return文で返されるもの)の型が、文字列型(str型)であることを明示しています。

今回の関数fnc_say_helloを実行すると、

'田中さん、こんにちは'

という文字列が表示されます。もちろん文字列型(str型)です。

アノテーションを使うことで以上のように型を明示することが可能となります。

アノテーションを使うメリットと特徴

メリット

Pyhonは普段はユーザーがいちいちオブジェクトの型を意識しなくてもプログラミングが出来ます。それは内部で上手く処理してくれるからですが。

しかし型が一致していないオブジェクト同士を計算したり・処理したりするとエラーが出ることが多々あります。

その場合エラーが出てから毎回、型をチェックし直すよりも、最初から型を意識したほうが効率がいいこともあるでしょう。特にそれなりの長く複雑なコードを書くときはそうでしょう。

そうしたときに「型を明示する」ことに特化した機能を提供するアノテーションを使えば、そういったミスやエラーを減らせるでしょう。

特徴

一方であくまでアノテーションは型を明示するだけです。それ以外のことは担当しません。

もちろんアノテーションを使うときは文法通りに書かないと文法エラーが出るのですが、逆に文法的に正しくアノテーションが書けていれば、たとえ明示される(指定する)型を間違っても処理はエラーになりません。

次の具体例を見てください。

def fnc_say_hello(name: str) -> int:
    return name+'さん、こんにちは'

fnc_say_hello('田中')

これは上の「関数定義の引数で使う場合」で書いたコードと、ある1箇所だけ除いて全く同じです。

その違う箇所とは、関数定義のところの、

-> int:

です。上の「関数定義の引数で使う場合」では、

-> str:

でした。

もちろん本来はこのstr(文字列型)が正しく、int(整数型)という指定は間違いです。

しかし、こうした型指定のミスがあったとしても、この関数は普通に実行され動きます。

つまり、「’田中さん、こんにちは’」という結果がきちんと表示されます。

アノテーションは、それ自体が文法的に正しく書けていれば、指定する型が間違っていても無視されるわけです。そういった意味で、本当に「型を明示する」だけの機能しか持たないと言えるでしょう。本当にその型でいいのかどうかといったチェックをしないのです。

プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。

など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。

One comment

Comments are closed.