Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
静的型付け言語Python
Search
utagawa kiki
July 14, 2016
Technology
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
静的型付け言語Python
KMC例会講座
utagawa kiki
July 14, 2016
More Decks by utagawa kiki
See All by utagawa kiki
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
2
1.5k
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
4.7k
tparseでgo testの出力を見やすくする
utgwkk
2
2.3k
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
4
2.7k
自動で //nolint を挿入する取り組み / Gopher's Gathering
utgwkk
1
3.5k
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
4.6k
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
21
17k
Dive into gomock / Go Conference 2024
utgwkk
14
8.8k
Goでリフレクションする、その前に / Kansai.go #1
utgwkk
4
3.8k
Other Decks in Technology
See All in Technology
あるけみー式LTスライド作成術
alchemy1115
1
210
GoCon2026 - Open Source, Open World
sanposhiho
4
3.5k
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
680
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
120
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
350
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
200
omasushiというライブラリを作った
polidog
PRO
0
220
ASTを使って影響範囲を特定する
nealle
0
180
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
160
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
370
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
9
990
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Accessibility Awareness
sabderemane
1
210
The Limits of Empathy - UXLibs8
cassininazir
1
660
ラッコキーワード サービス紹介資料
rakko
1
4.8M
Leo the Paperboy
mayatellez
9
2.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
570
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
980
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
520
Discover your Explorer Soul
emna__ayadi
2
1.3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
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