kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

PEP 483を読む(続き7)

 

Pragmaticsってなんだ
語用論?でいいの?

  • 型が期待されるところではNoneはtype(None)とみなされる
  • エイリアスが使える
  • 前方参照には文字列を使う
  • デフォルト値としてNoneを指定すると、Optional型を指定したことになる

def foo(a: Bar = None) ってなんかおかしくねと思ってたけどそういうことか
お行儀としてはOptionalと書くべきなんだろうか
それともPEPに書いてあるんだし堂々とa: Bar = Noneでいいのか

  • bounded形式で宣言することができる

T = TypeVar('T', bound=complex)と書くとTはcomplexまたはその部分型になれるらしい
PEP 484に書いてあった

  • コメントに型宣言を書ける

ところどころに出てくるけど、変数の型を宣言するのに使ってるみたいだから
PEP 526が実装された今となっては不要?
それとも使いどころがある?

  • cast(T, obj)で型をキャストできる
  • ほかはPEP484を見て

type.pyで定義済みの型とプロトコル

  • collections.abcのすべて(SetはAbstractSetになっている)
  • Dict、List、Set、FrozenSetとあと少し
  • re.Pattern[AnyStr]、re.Match[AnyStr]
  • io.IO[AnyStr]、io.TextIO 〜 io.IO[str]、io.BinaryIO 〜 io.IO[bytes]

AnyStrはTypeVar('AnyStr', str, bytes)のことだけど
サンプルじゃなくてそういうのがあるんだな

PEP 483おしまい!