動かざることバグの如し

近づきたいよ 君の理想に

Python3.10からimport Optionalしなくてよくなった

環境

from typing import Optionalしなくて良くなった

昨今のPythonでは型アノテーションが流行っているが、その中でもOptionalは使う機会が多い

例えばPythonの組み込みメソッドであるstr.startswith()は文字列が指定された文字列から開始しているかを調べてくれるが、実は第2引数に整数を渡すことで何文字目から調べるか指定できる。Noneが渡されたときにはなかったことにされる。

'1234567890'.startswith('123')
> True

'1234567890'.startswith('4567')
> False

'1234567890'.startswith('4567', 3)
> True

これをOptionalを使うと

def startswith(prefix:str, start:Optional[int]=None)
  ...

と定義できる。

だが、このままだとOptionalがないと怒られてしまう。

NameError: name 'Optional' is not defined

IDEのオートインポート使えよって話かもしれないが、そんな面倒なことをしなくても気軽に書けるのがPythonのメリットではなかったのか。

ってことでPython 3.10からは簡略記法で記述できる。

def startswith(prefix:str, start:int|None=None):
  ...

うーんこっちのほうが見やすい。何よりimport不要になったのはデカい。

はじめからこっちにしておけばよかったのに

参考リンク