Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PyCharmのススメ 第1部 Type Hints編
もしくは、Pythonと型アノテーション
山口健史
2017-05-19
Pythonと型アノテーション
1
型アノテーションの歴史
 Python3.0〜 (Function Annotations)
 メソッド定義の引数と返り値の型アノテーションの追加
 Python3.5〜 (Type Hints)
 typing モジュール
(ジェネリ...
Function Annotations (Python3.0)
 関数の引数と、返り値の型アノテーション
 ただしインタプリタは型アノテーションを無視する
 サードパーティ製ツールが必要
 そこで PyCharm の出番ですよ!!
3...
Function Annotations (Python3.0)
 返り値の型アノテーションのおかげで
. を入力した時点で補完候補に型strの候補が出現する
 引数の型アノテーションのおかげで
警告が出る
4
若干の嘘が
あります
Function Annotations (Python3.0)
 型アノテーションに書けるのは1つの値(式)だけ
 list と書くと list なのは分かるけれど
そこに何が入っているのかはアノテーション
できない
 「int型 か ...
型アノテーションの歴史
 Python3.0〜 (Function Annotations)
 メソッド定義の引数と返り値の型アノテーションの追加
 Python3.5〜 (Type Hints)
 typing モジュール
(ジェネリ...
Type Hints (Python3.5)
 Python3.5でtypingモジュール登場!!
(ただし暫定モジュール)
 ジェネリクス/型変数/型エイリアス
 Any型/Union型/Optional型
 Python3.0 の関...
Type Hints (Python3.5)
 ジェネリクス
 Dict[str, Tuple[int, str, List[Tuple[str, List[int]]]]] 型の
変数dがあるとき、d[’key’][2][3][0] の型...
Type Hints (Python3.5)
 型変数
9
型変数
パラメータ化された型
Type Hints (Python3.5)
 Union型(直和型)
 どれでもいい
 Any型
 なんでもいい
 object を指定すると
object が持っている属性しか
使えなくなるからダメ
 (単純な)generato...
実は……PyCharmなら昔からできました 11
PyCharm独自の
docstringによる型アノテーション
https://www.jetbrains.com/help/pycharm/2017.1/type-hinting-in-pyc...
実は……PyCharmは単純な型推論もできます 12
アノテーションなしで
型推論してる
型アノテーションの歴史
 Python3.0〜 (Function Annotations)
 メソッド定義の引数と返り値の型アノテーションの追加
 Python3.5〜 (Type Hints)
 typing モジュール
(ジェネリ...
Variable Annotations(Python3.6)
 変数の型アノテーション
 一度これを書いてしまうと3.5以前では実行できない
 後方互換性を壊してまで書く気はしないなぁ、と思っていたら!
14
変数名: 型 = 値
オブ...
Variable Annotations(Python3.6)
 クラススタイル NamedTuple 型付き版
15
※タプルの各要素に
添え字ではなくて
名前でアクセス
できるようになる
※他にもいろいろ
Variable Annotations(Python3.6)
 クラススタイル NamedTuple 型付き版
16
めちゃくちゃ便利!
これに気がついた直後に
Python3.6の環境を作りました
17
型アノテーションの限界
18
無理なこともある
 NamedTuple は新しい型を作るが……
 フィールドを引数に取るコンストラクタを
自動で生成する(メタプログラミング的に)
 ↓の場合code, name, wards という3引数を取るコンストラクタが
存在す...
不備もある
 普通に使うイディオムで警告が
 なにがおかしいのかわからない
(stubファイルの不備かPyCharmのバグか)
20
(いつ)使うべきなのか
21
静的型付きじゃないことの良さ
 そもそも、型をいちいち書かなくても
どんどん書き進められるのが
静的型付きでない言語のメリットなのに?
 いちいち型を書いていくんですか?
 実行時には何もしてくれないのに?
 型の復讐
22
http:...
静的型付きじゃないことのつらさ
 かといって
Dict[str, Tuple[int, str, List[Tuple[str, List[int]]]]]
みたいな型を持つデータが登場すると死ねる
 それは極端としても
List[Tupl...
ありがちなサイクル 24
調整中
修正
開発中
試行錯誤して書いている最中
とりあえずやりたかったことができてきた
色々とよくないところがでてきて調整中
やれやれなんとかなった
(半年ぐらい放置)
ひさしぶりに引っ張り出してきたら覚えていない!...
いつ型ヒントを書くか 25
調整中
開発中
試行錯誤して書いている最中
とりあえずやりたかったことができてきた
色々とよくないところがでてきて調整中
このタイミングで
複雑な部分から
型アノテーション
を付けていく
いつ型ヒントを書くか 26
調整中
修正
開発中
試行錯誤して書いている最中
とりあえずやりたかったことができてきた
色々とよくないところがでてきて調整中
やれやれなんとかなった
(半年ぐらい放置)
型アノテーションのおかげで助かった!
不具合...
Upcoming SlideShare
Loading in …5
×

Python と型アノテーション

11,424 views

Published on

LTの資料です

Published in: Software
  • Be the first to comment

Python と型アノテーション

  1. 1. PyCharmのススメ 第1部 Type Hints編 もしくは、Pythonと型アノテーション 山口健史 2017-05-19
  2. 2. Pythonと型アノテーション 1
  3. 3. 型アノテーションの歴史  Python3.0〜 (Function Annotations)  メソッド定義の引数と返り値の型アノテーションの追加  Python3.5〜 (Type Hints)  typing モジュール (ジェネリクス/型変数/型エイリアス/Any/Union/Optional/etc …)  Python3.6〜 (Variable Annotations)  変数アノテーション 2
  4. 4. Function Annotations (Python3.0)  関数の引数と、返り値の型アノテーション  ただしインタプリタは型アノテーションを無視する  サードパーティ製ツールが必要  そこで PyCharm の出番ですよ!! 3 def 関数名(引数1: 型,引数2: 型,…) -> 返り値の型: https://www.jetbrains.com/pycharm/
  5. 5. Function Annotations (Python3.0)  返り値の型アノテーションのおかげで . を入力した時点で補完候補に型strの候補が出現する  引数の型アノテーションのおかげで 警告が出る 4 若干の嘘が あります
  6. 6. Function Annotations (Python3.0)  型アノテーションに書けるのは1つの値(式)だけ  list と書くと list なのは分かるけれど そこに何が入っているのかはアノテーション できない  「int型 か float型」みたいな直和型が書けない  現実的にはあまり役に立たない 5
  7. 7. 型アノテーションの歴史  Python3.0〜 (Function Annotations)  メソッド定義の引数と返り値の型アノテーションの追加  Python3.5〜 (Type Hints)  typing モジュール (ジェネリクス/型変数/型エイリアス/Any/Union/Optional/etc …)  Python3.6〜 (Variable Annotations)  変数アノテーション 6
  8. 8. Type Hints (Python3.5)  Python3.5でtypingモジュール登場!! (ただし暫定モジュール)  ジェネリクス/型変数/型エイリアス  Any型/Union型/Optional型  Python3.0 の関数アノテーションで決まっていたのは 構文だけで、何をどう書くのか? の仕様はなかった  →Python3.5で劇的に改善 7
  9. 9. Type Hints (Python3.5)  ジェネリクス  Dict[str, Tuple[int, str, List[Tuple[str, List[int]]]]] 型の 変数dがあるとき、d[’key’][2][3][0] の型は? 8 ジェネリック版のlist型ヒント 型指定を [] で括る
  10. 10. Type Hints (Python3.5)  型変数 9 型変数 パラメータ化された型
  11. 11. Type Hints (Python3.5)  Union型(直和型)  どれでもいい  Any型  なんでもいい  object を指定すると object が持っている属性しか 使えなくなるからダメ  (単純な)generator 10 警告 警告
  12. 12. 実は……PyCharmなら昔からできました 11 PyCharm独自の docstringによる型アノテーション https://www.jetbrains.com/help/pycharm/2017.1/type-hinting-in-pycharm.html#legacy
  13. 13. 実は……PyCharmは単純な型推論もできます 12 アノテーションなしで 型推論してる
  14. 14. 型アノテーションの歴史  Python3.0〜 (Function Annotations)  メソッド定義の引数と返り値の型アノテーションの追加  Python3.5〜 (Type Hints)  typing モジュール (ジェネリクス/型変数/型エイリアス/Any/Union/Optional/etc …)  Python3.6〜 (Variable Annotations)  変数アノテーション 13
  15. 15. Variable Annotations(Python3.6)  変数の型アノテーション  一度これを書いてしまうと3.5以前では実行できない  後方互換性を壊してまで書く気はしないなぁ、と思っていたら! 14 変数名: 型 = 値 オブジェクト.属性: 型 = 値
  16. 16. Variable Annotations(Python3.6)  クラススタイル NamedTuple 型付き版 15 ※タプルの各要素に 添え字ではなくて 名前でアクセス できるようになる ※他にもいろいろ
  17. 17. Variable Annotations(Python3.6)  クラススタイル NamedTuple 型付き版 16
  18. 18. めちゃくちゃ便利! これに気がついた直後に Python3.6の環境を作りました 17
  19. 19. 型アノテーションの限界 18
  20. 20. 無理なこともある  NamedTuple は新しい型を作るが……  フィールドを引数に取るコンストラクタを 自動で生成する(メタプログラミング的に)  ↓の場合code, name, wards という3引数を取るコンストラクタが 存在するけれども、それはどこにも書かれていない  PyCharm はこのコンストラクタの存在を認識できない 19
  21. 21. 不備もある  普通に使うイディオムで警告が  なにがおかしいのかわからない (stubファイルの不備かPyCharmのバグか) 20
  22. 22. (いつ)使うべきなのか 21
  23. 23. 静的型付きじゃないことの良さ  そもそも、型をいちいち書かなくても どんどん書き進められるのが 静的型付きでない言語のメリットなのに?  いちいち型を書いていくんですか?  実行時には何もしてくれないのに?  型の復讐 22 http://qiita.com/t2y/items/f11032f98d57bc7fc5da http://lucumr.pocoo.org/2014/8/24/revenge-of-the-types/
  24. 24. 静的型付きじゃないことのつらさ  かといって Dict[str, Tuple[int, str, List[Tuple[str, List[int]]]]] みたいな型を持つデータが登場すると死ねる  それは極端としても List[Tuple[int, str, List[str]]] ぐらいなら普通  半年後に見たときに思い出せる? 23
  25. 25. ありがちなサイクル 24 調整中 修正 開発中 試行錯誤して書いている最中 とりあえずやりたかったことができてきた 色々とよくないところがでてきて調整中 やれやれなんとかなった (半年ぐらい放置) ひさしぶりに引っ張り出してきたら覚えていない! 不具合!
  26. 26. いつ型ヒントを書くか 25 調整中 開発中 試行錯誤して書いている最中 とりあえずやりたかったことができてきた 色々とよくないところがでてきて調整中 このタイミングで 複雑な部分から 型アノテーション を付けていく
  27. 27. いつ型ヒントを書くか 26 調整中 修正 開発中 試行錯誤して書いている最中 とりあえずやりたかったことができてきた 色々とよくないところがでてきて調整中 やれやれなんとかなった (半年ぐらい放置) 型アノテーションのおかげで助かった! 不具合! このタイミングで 複雑な部分から 型アノテーション を付けていく ってなったらいいね……

×