Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python Type Annotation
Search
K Yamaguchi
May 19, 2017
Technology
0
33
Python Type Annotation
K Yamaguchi
May 19, 2017
Tweet
Share
More Decks by K Yamaguchi
See All by K Yamaguchi
Coding in Color
quintia
0
1
Python 実行環境の話 2024
quintia
0
14
Python 実行環境の話
quintia
0
28
裏切られる直感と、確率と精度のはなし
quintia
0
63
Apache Spark Tutorial
quintia
0
12
No Error Conversion of Floating Points
quintia
0
17
Other Decks in Technology
See All in Technology
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
0
220
つくって納得、つかって実感! 大規模言語モデルことはじめ
recruitengineers
PRO
32
12k
「魔法少女まどか☆マギカ Magia Exedra」のグローバル展開を支える、開発チームと翻訳チームの「意識しない協創」を実現するローカライズシステム
gree_tech
PRO
0
420
生成AI時代のデータ基盤設計〜ペースレイヤリングで実現する高速開発と持続性〜 / Levtech Meetup_Session_2
sansan_randd
1
110
実践データベース設計 ①データベース設計概論
recruitengineers
PRO
4
2k
DeNA での思い出 / Memories at DeNA
orgachem
PRO
6
1.9k
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
2
1.9k
クラウドセキュリティを支える技術と運用の最前線 / Cutting-edge Technologies and Operations Supporting Cloud Security
yuj1osm
2
250
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
2
220
ヒューリスティック評価を用いたゲームQA実践事例
gree_tech
PRO
0
420
JuniorからSeniorまで: DevOpsエンジニアの成長ロードマップ
yuriemori
2
350
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
490
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Agile that works and the tools we love
rasmusluckow
330
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Practical Orchestrator
shlominoach
190
11k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Typedesign – Prime Four
hannesfritz
42
2.8k
A designer walks into a library…
pauljervisheath
207
24k
Designing for humans not robots
tammielis
253
25k
KATA
mclloyd
32
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Transcript
PyCharmのススメ 第1部 Type Hints編 もしくは、Pythonと型アノテーション ⼭⼝健史 2017-05-19 総合研究会 研究Tips
Pythonと型アノテーション 1
型アノテーションの歴史 p Python3.0〜 (Function Annotations) p メソッド定義の引数と返り値の型アノテーションの追加 p Python3.5〜 (Type
Hints) p typing モジュール (ジェネリクス/型変数/型エイリアス/Any/Union/Optional/etc …) p Python3.6〜 (Variable Annotations) p 変数アノテーション 2
Function Annotations (Python3.0) p 関数の引数と、返り値の型アノテーション p ただしインタプリタは型アノテーションを無視する p サードパーティ製ツールが必要 p
そこで PyCharm の出番ですよ!! 3 def 関数名(引数1: 型,引数2: 型,…) -> 返り値の型: https://www.jetbrains.com/pycharm/
Function Annotations (Python3.0) p 返り値の型アノテーションのおかげで . を⼊⼒した時点で補完候補に型strの候補が出現する p 引数の型アノテーションのおかげで 警告が出る
4 若⼲の嘘が あります
Function Annotations (Python3.0) p 型アノテーションに書けるのは1つの値(式)だけ p list と書くと list なのは分かるけれど
そこに何が⼊っているのかはアノテーション できない p 「int型 か float型」みたいな直和型が書けない p 現実的にはあまり役に⽴たない 5
型アノテーションの歴史 p Python3.0〜 (Function Annotations) p メソッド定義の引数と返り値の型アノテーションの追加 p Python3.5〜 (Type
Hints) p typing モジュール (ジェネリクス/型変数/型エイリアス/Any/Union/Optional/etc …) p Python3.6〜 (Variable Annotations) p 変数アノテーション 6
Type Hints (Python3.5) p Python3.5でtypingモジュール登場!! (ただし暫定モジュール) p ジェネリクス/型変数/型エイリアス p Any型/Union型/Optional型
p Python3.0 の関数アノテーションで決まっていたのは 構⽂だけで、何をどう書くのか? の仕様はなかった p →Python3.5で劇的に改善 7
Type Hints (Python3.5) p ジェネリクス p Dict[str, Tuple[int, str, List[Tuple[str,
List[int]]]]] 型の 変数dがあるとき、d[’key’][2][3][0] の型は? 8 ジェネリック版のlist型ヒント 型指定を [] で括る
Type Hints (Python3.5) p 型変数 9 型変数 パラメータ化された型
Type Hints (Python3.5) p Union型(直和型) p どれでもいい p Any型 p
なんでもいい p object を指定するのは object が持っている属性しか 使えなくなるからダメ p (単純な)generator 10 警告 警告
実は……PyCharmなら昔からできました 11 PyCharm独⾃の docstringによる型アノテーション https://www.jetbrains.com/help/pycharm/2017.1/type-hinting-in-pycharm.html#legacy
実は……PyCharmは単純な型推論もできます 12 アノテーションなしで 型推論してる
型アノテーションの歴史 p Python3.0〜 (Function Annotations) p メソッド定義の引数と返り値の型アノテーションの追加 p Python3.5〜 (Type
Hints) p typing モジュール (ジェネリクス/型変数/型エイリアス/Any/Union/Optional/etc …) p Python3.6〜 (Variable Annotations) p 変数アノテーション 13
Variable Annotations(Python3.6) p 変数の型アノテーション p ⼀度これを書いてしまうと3.5以前では実⾏できない p 後⽅互換性を壊してまで書く気はしないなぁ 14 変数名:
型 = 値 オブジェクト.属性: 型 = 値
Variable Annotations(Python3.6) p クラススタイル NamedTuple 型付き版 15 ※タプルの各要素に 添え字ではなくて 名前でアクセス
できるようになる ※他にもいろいろ
Variable Annotations(Python3.6) p クラススタイル NamedTuple 型付き版 16