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
Search
utagawa kiki
July 14, 2016
Technology
0
210
静的型付け言語Python
KMC例会講座
utagawa kiki
July 14, 2016
Tweet
Share
More Decks by utagawa kiki
See All by utagawa kiki
tparseでgo testの出力を見やすくする
utgwkk
2
440
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
4
940
自動で //nolint を挿入する取り組み / Gopher's Gathering
utgwkk
1
1.7k
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
3.2k
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
21
17k
Dive into gomock / Go Conference 2024
utgwkk
14
8.3k
Goでリフレクションする、その前に / Kansai.go #1
utgwkk
4
3.6k
Go製Webアプリケーションのエラーとの向き合い方大全、あるいはやっぱりスタックトレース欲しいやん / Kyoto.go #50
utgwkk
7
4.2k
ありがとう、create-react-app
utgwkk
4
12k
Other Decks in Technology
See All in Technology
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.1k
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
120
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
930
あたらしい上流工程の形。 0日導入からはじめるAI駆動PM
kumaiu
5
710
Meshy Proプラン課金した
henjin0
0
180
DatabricksホストモデルでAIコーディング環境を構築する
databricksjapan
0
230
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
120
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
170
今日から始めるAmazon Bedrock AgentCore
har1101
4
320
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
0
600
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
67k
【インシデント入門】サイバー攻撃を受けた現場って何してるの?
shumei_ito
0
1.4k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
430
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1.1k
Building AI with AI
inesmontani
PRO
1
670
Writing Fast Ruby
sferik
630
62k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
640
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
sira's awesome portfolio website redesign presentation
elsirapls
0
140
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
290
Transcript
静的型付け言語Python
こんにちは • @utgw (うたがわ) • 工学部情報学科 計算機科学コース2回生 • 第39代副広報・root •
Twitter: @utgwkk • GitHub: @utgw
アンケートです • 動的型付け言語を書いたことがある • Python を書いたことがある • 型理論に詳しい
前置き • 型に関する踏み込んだ話はしません(できません) • あくまで言語機能の紹介としてやっていきます • Python 3 系の話をします ◦
Python 2 系は各位うまくやってくれ ◦ https://blog.ymyzk.com/2016/02/python-2-type-hints/ とかに載ってそう
Pythonの型ヒントの経緯 • 2006/12/2: PEP 3107 - Function Annotations ◦ Python
3.0 で関数の型ヒントだけ導入された ◦ あくまでもヒント • 2014/9/29: PEP 484 - Type Hints ◦ 変数の型ヒントやジェネリクスなど、より踏み込んだ型ヒン トに関する提案 • 2015/9/14: Python 3.5 リリース ◦ PEP 484 を実現するモジュール typing が導入された
動的型付け言語に静的型を導入する試み 1. TypeScript の場合 1.1. TypeScript のコードを書く 1.2. コンパイラが型チェックをする 1.3.
JavaScript にコンパイルされる 2. Python + 型ヒントの場合 2.1. Python のコードに型の情報を書く 2.2. 各位うまくやってくれ!!!!!
各位うまくやってくれ!!!!! • 各位うまくやっていきましょう ◦ 実行時に型チェックがされるわけではない ◦ そもそも言語としては動的型付け言語のまま ◦ むやみに互換性を壊したくない •
型チェックツールを使いましょう ◦ mypy を使いましょう ◦ そのうち PyCharm とかでも対応しそう
動的型付け言語に静的型を導入する試み(修正) 1. TypeScript の場合 1.1. TypeScript のコードを書く 1.2. コンパイラが型チェックをする 1.3.
JavaScript にコンパイルされる 2. Python + 型ヒントの場合 2.1. Python のコードに型の情報を書く 2.2. mypy 等で型チェックをする 2.3. よさそうだったら本番投入
従来のコード def fib(n): a, b = 0, 1 i =
0 while i <= n: yield a a, b = b, a + b i += 1
型情報のあるコード from typing import Iterator def fib(n: int) -> Iterator[int]:
a, b = 0, 1 i = 0 while i <= n: yield a a, b = b, a + b i += 1
型情報のあるコード from typing import Iterator def fib(n: int) -> Iterator[int]:
a, b = 0, 1 i = 0 while i <= n: yield a a, b = b, a + b i += 1
どのようにして型情報を記述するのか • ざっくり見ていきましょう ◦ 変数の型ヒント ◦ 関数の型ヒント ◦ cast ◦
Callable ◦ ジェネリクス ◦ 直和型 ◦ Optional ◦ Any ◦ その他
変数の型ヒント • 変数名 = 値 # type: 型名 • コメントに型名を記述することで型ヒントとする
• 型名の alias が定義できる ◦ 別名 = 型名
関数の型ヒント • def 関数名(x: 型, y: 型, ...) -> 返り値の型:
• 引数の既定値は x: 型 = 値 のように書く
cast • cast(キャストする型, 値) • 値をある型にキャストしていることを示す ◦ 実際にはキャストしない
Callable • Callable[[引数の型のリスト, ...], 返り値の型] • 呼び出し可能であることを示す
ジェネリクス • T = TypeVar(‘T’) • def hoge(val: T) ->
T: • ジェネリックなクラスが作れる
直和型 • Union[A, B, ...] • A, B, ...のいずれかの型であることを示す •
複数の型をとりうるが、ジェネリクスほどは自由でないときに使 う
Optional • Optional(X) = Union[X, None] • X もしくは None
であることを示す • 失敗するかもしれない操作に使う? ◦ それ例外処理でよくない?
Any • すべての型の親 • auto 型のような感じで使うのかな • 型ヒント書かなきゃいいじゃん
その他 • List[T]: T型のリスト • Dict[K, V]: K型をキーとしてV型の要素を格納する辞書型 • Iterable[T]:
T型の一連の要素を持つ型 • Container: 何らかのコンテナ • SupportsInt: int(x) という操作ができる型
実演
まとめ • Python は言語全体として静的型になるつもりはない • あくまで各位うまくやってくれ • mypy を使って型検査していこう ◦
まだうまくいってない部分もありそう? ◦ ぼくの型の指定がバグってたら許してくれ • 型理論よく分かってないので戸惑った
ありがとうございました • 質問など ◦ 型のことは型に詳しい人に聞いてくれ
参考 • typing — 型ヒントのサポート ◦ http://docs.python.jp/3/library/typing.html • PEP 484
◦ https://www.python.org/dev/peps/pep-0484/ • PEP 3107 ◦ https://www.python.org/dev/peps/pep-3107/ • mypy で静的型付け Python プログラミング ◦ http://t2y.hatenablog.jp/entry/2014/12/22/004525