Pythonの変数アノテーション

Pythonの変数アノテーション

流行は「とにかく発言すること」だ

最近のプログラミング言語(KotlinとかGoとか)は、とにかく宣言することを大事にしています。

RubyとかPythonみたいに、ちょっと前までは「C/C++とかの宣言なんて面倒じゃんね。コンパイラー/インタープリターに推測させようぜ」という機運だったのに。

どうやら、「この変数/関数、何言ってるのか/何返すのか分かんないよね? じゃあ、宣言させた方が良いよね!?」というのが昨今の流行らしい。

ちなみに関数(函数)という言葉は英語の「function」が語源らしい。中国語(普通話)のピン音「Hánshù」も確かに音が似てますね。高校時代、数学教師が「箱(函)の中にモノを入れて出てくる機能を持つ」と言っていましたが、どうやら違うらしいです。

ということで、ついにPythonでも3.0から書くことができるようになりました!

例がこちら。

def fn(a: int) -> int:
    return a ** 2


if __name__ == '__main__':

    a_int  : int   = 12
    b_float: float = 6.23
    print(fn(a_int))   # 144
    print(fn(b_float)) # 38.812900000000006

良い点は、「何を変数として入れるべきか分かる!」ということ。

なるほど。Pythonの場合は変数の後ろに型を書くらしい。C/C++とは違うんだね。

でもダメな点としては、「別に型指定してくれてないじゃん」ということ。

例の通りでは、int型でアノテーションしているけど、呼び出すときにfloat型でも勝手に動作してしまいます。

まあ、アノテーションというのは、型を縛り付けるためのものじゃなくて、ただのコメント文みたいなものなので、そうなってしまいます。

そう遠くない未来に型を縛り付けるようになってくれると、ムダな破壊とかが起こらなくなって嬉しいのですが……。