Soumettre la recherche
Mettre en ligne
静的型付け言語Python
•
2 j'aime
•
4,560 vues
kiki utagawa
Suivre
Python の型ヒントに関する概要
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 25
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
T. Suwa
TiDBのトランザクション
TiDBのトランザクション
Akio Mitobe
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
Recommandé
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
T. Suwa
TiDBのトランザクション
TiDBのトランザクション
Akio Mitobe
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書く
mametter
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Quine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
定理証明支援系Coqについて
定理証明支援系Coqについて
Yoshihiro Mizoguchi
Deflate
Deflate
7shi
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
trmr
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
エントリー層向けセミナー#04『はじめての最適化』
エントリー層向けセミナー#04『はじめての最適化』
The Japan DataScientist Society
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
入門 シェル実装
入門 シェル実装
Yusuke Sangenya
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
生活に潤いを与える技術
生活に潤いを与える技術
kiki utagawa
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
Shinichi Nakagawa
Contenu connexe
Tendances
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書く
mametter
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Quine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
定理証明支援系Coqについて
定理証明支援系Coqについて
Yoshihiro Mizoguchi
Deflate
Deflate
7shi
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
trmr
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
エントリー層向けセミナー#04『はじめての最適化』
エントリー層向けセミナー#04『はじめての最適化』
The Japan DataScientist Society
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
入門 シェル実装
入門 シェル実装
Yusuke Sangenya
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Tendances
(20)
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書く
Docker Compose 徹底解説
Docker Compose 徹底解説
プログラムを高速化する話
プログラムを高速化する話
Quine・難解プログラミングについて
Quine・難解プログラミングについて
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
Rolling hash
Rolling hash
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
定理証明支援系Coqについて
定理証明支援系Coqについて
Deflate
Deflate
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
エントリー層向けセミナー#04『はじめての最適化』
エントリー層向けセミナー#04『はじめての最適化』
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
入門 シェル実装
入門 シェル実装
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
En vedette
生活に潤いを与える技術
生活に潤いを与える技術
kiki utagawa
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
Shinichi Nakagawa
Startup Science 2017 拡大版(1750page)7/10
Startup Science 2017 拡大版(1750page)7/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)8/10
Startup Science 2017 拡大版(1750page)8/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)5/10
Startup Science 2017 拡大版(1750page)5/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)6/10
Startup Science 2017 拡大版(1750page)6/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)3/10
Startup Science 2017 拡大版(1750page)3/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)4/10
Startup Science 2017 拡大版(1750page)4/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)2/10
Startup Science 2017 拡大版(1750page)2/10
Masa Tadokoro
Startup Science 2017 拡大版(1750page)1/10
Startup Science 2017 拡大版(1750page)1/10
Masa Tadokoro
En vedette
(10)
生活に潤いを与える技術
生活に潤いを与える技術
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
Startup Science 2017 拡大版(1750page)7/10
Startup Science 2017 拡大版(1750page)7/10
Startup Science 2017 拡大版(1750page)8/10
Startup Science 2017 拡大版(1750page)8/10
Startup Science 2017 拡大版(1750page)5/10
Startup Science 2017 拡大版(1750page)5/10
Startup Science 2017 拡大版(1750page)6/10
Startup Science 2017 拡大版(1750page)6/10
Startup Science 2017 拡大版(1750page)3/10
Startup Science 2017 拡大版(1750page)3/10
Startup Science 2017 拡大版(1750page)4/10
Startup Science 2017 拡大版(1750page)4/10
Startup Science 2017 拡大版(1750page)2/10
Startup Science 2017 拡大版(1750page)2/10
Startup Science 2017 拡大版(1750page)1/10
Startup Science 2017 拡大版(1750page)1/10
静的型付け言語Python
1.
静的型付け言語Python
2.
こんにちは ● @utgw (うたがわ) ●
工学部情報学科 計算機科学コース2回生 ● 第39代副広報・root ● Twitter: @utgwkk ● GitHub: @utgw
3.
アンケートです ● 動的型付け言語を書いたことがある ● Python
を書いたことがある ● 型理論に詳しい
4.
前置き ● 型に関する踏み込んだ話はしません(できません) ● あくまで言語機能の紹介としてやっていきます ●
Python 3 系の話をします ○ Python 2 系は各位うまくやってくれ ○ https://blog.ymyzk.com/2016/02/python-2-type-hints/ とかに載ってそう
5.
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 が導入された
6.
動的型付け言語に静的型を導入する試み 1. TypeScript の場合 1.1.
TypeScript のコードを書く 1.2. コンパイラが型チェックをする 1.3. JavaScript にコンパイルされる 2. Python + 型ヒントの場合 2.1. Python のコードに型の情報を書く 2.2. 各位うまくやってくれ!!!!!
7.
各位うまくやってくれ!!!!! ● 各位うまくやっていきましょう ○ 実行時に型チェックがされるわけではない ○
そもそも言語としては動的型付け言語のまま ○ むやみに互換性を壊したくない ● 型チェックツールを使いましょう ○ mypy を使いましょう ○ そのうち PyCharm とかでも対応しそう
8.
動的型付け言語に静的型を導入する試み(修正) 1. TypeScript の場合 1.1.
TypeScript のコードを書く 1.2. コンパイラが型チェックをする 1.3. JavaScript にコンパイルされる 2. Python + 型ヒントの場合 2.1. Python のコードに型の情報を書く 2.2. mypy 等で型チェックをする 2.3. よさそうだったら本番投入
9.
従来のコード def fib(n): a, b
= 0, 1 i = 0 while i <= n: yield a a, b = b, a + b i += 1
10.
型情報のあるコード 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
11.
型情報のあるコード 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
12.
どのようにして型情報を記述するのか ● ざっくり見ていきましょう ○ 変数の型ヒント ○
関数の型ヒント ○ cast ○ Callable ○ ジェネリクス ○ 直和型 ○ Optional ○ Any ○ その他
13.
変数の型ヒント ● 変数名 =
値 # type: 型名 ● コメントに型名を記述することで型ヒントとする ● 型名の alias が定義できる ○ 別名 = 型名
14.
関数の型ヒント ● def 関数名(x:
型, y: 型, ...) -> 返り値の型: ● 引数の既定値は x: 型 = 値 のように書く
15.
cast ● cast(キャストする型, 値) ●
値をある型にキャストしていることを示す ○ 実際にはキャストしない
16.
Callable ● Callable[[引数の型のリスト, ...],
返り値の型] ● 呼び出し可能であることを示す
17.
ジェネリクス ● T =
TypeVar(‘T’) ● def hoge(val: T) -> T: ● ジェネリックなクラスが作れる
18.
直和型 ● Union[A, B,
...] ● A, B, ...のいずれかの型であることを示す ● 複数の型をとりうるが、ジェネリクスほどは自由でないときに使 う
19.
Optional ● Optional(X) =
Union[X, None] ● X もしくは None であることを示す ● 失敗するかもしれない操作に使う? ○ それ例外処理でよくない?
20.
Any ● すべての型の親 ● auto
型のような感じで使うのかな ● 型ヒント書かなきゃいいじゃん
21.
その他 ● List[T]: T型のリスト ●
Dict[K, V]: K型をキーとしてV型の要素を格納する辞書型 ● Iterable[T]: T型の一連の要素を持つ型 ● Container: 何らかのコンテナ ● SupportsInt: int(x) という操作ができる型
22.
実演
23.
まとめ ● Python は言語全体として静的型になるつもりはない ●
あくまで各位うまくやってくれ ● mypy を使って型検査していこう ○ まだうまくいってない部分もありそう? ○ ぼくの型の指定がバグってたら許してくれ ● 型理論よく分かってないので戸惑った
24.
ありがとうございました ● 質問など ○ 型のことは型に詳しい人に聞いてくれ
25.
参考 ● 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
Télécharger maintenant