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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
1.6k
tparseでgo testの出力を見やすくする
utgwkk
2
590
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
4
1.1k
自動で //nolint を挿入する取り組み / Gopher's Gathering
utgwkk
1
1.8k
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
3.3k
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
21
17k
Dive into gomock / Go Conference 2024
utgwkk
14
8.4k
Goでリフレクションする、その前に / Kansai.go #1
utgwkk
4
3.7k
Go製Webアプリケーションのエラーとの向き合い方大全、あるいはやっぱりスタックトレース欲しいやん / Kyoto.go #50
utgwkk
7
4.3k
Other Decks in Technology
See All in Technology
ビズリーチにおける検索・推薦の取り組み / DEIM2026
visional_engineering_and_design
1
100
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
460
Lookerの最新バージョンv26.2がやばい話
waiwai2111
1
160
Kaggleで鍛えたスキルの実務での活かし方 競技とプロダクト開発のリアル
recruitengineers
PRO
1
150
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
360
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
820
管理者向けGitHub Enterpriseの運用Tips紹介: 人にもAIにも優しいプラットフォームづくり
yuriemori
0
110
どこで打鍵するのが良い? IaCの実行基盤選定について
nrinetcom
PRO
2
170
DX Improvement at Scale
ntk1000
2
290
オンプレとGoogle Cloudを安全に繋ぐための、セキュア通信の勘所
waiwai2111
3
1.1k
型を書かないRuby開発への挑戦
riseshia
0
190
Security Diaries of an Open Source IAM
ahus1
0
200
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Navigating Team Friction
lara
192
16k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
170
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Ethics towards AI in product and experience design
skipperchong
2
210
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
Technical Leadership for Architectural Decision Making
baasie
3
270
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
150
4 Signs Your Business is Dying
shpigford
187
22k
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