Pythonはどうやってlen関数で長さを手にいれているの?

Takayuki Shimizukawa
Takayuki ShimizukawaWeb Developer at BePROUD Inc.
Takayuki Shimizukawa
@shimizukawa (清水川)
 BeProud co, ltd.
 Sphinx committer
 一般社団法人PyCon JP理事
Board member of PyCon JP committee
おまえ誰よ / Who are you
22017/9/8
[AD] Python オンライン学習サービス PyQ
機械学習コンテンツをリリース
https://pyq.jp/
NEW!
32017/9/8
42017/9/8
The person who think …
以下のように思っている方
 I got into Python, but it doesn’t come nicely..
Pythonは入門したが、なんだかしっくりこない..
 Why len is a function?
なんでlenは関数なんだろう
 Python is not object-oriented as len() function
len()関数だなんてPythonはオブジェクト指向じゃないな
Target attendees
52017/9/8
1. len() がオブジェクトの長さを手に入れる方法
 なんでPythonはlen()関数なの
 Protocol: オブジェクトの振る舞い
2. if がオブジェクトのTrue/Falseを判断する方法
3. for がオブジェクトの繰り返し要素を取得する方法
4. まとめ
5. References
アジェンダ
2017/9/8 6
72017/9/8
 len関数で文字列の長さを得ます
 obj.__len__() メソッドを呼んで文字列の長さを得ます
 得られる結果は同じ
 len(obj)は内部で obj.__len__() を実行しています
len()関数に文字列を渡したときに起こること
>>> len(“もじれつ”)
4
>>> “もじれつ”.__len__()
4
82017/9/8
 obj.__len__() が呼ばれるなら obj.length() でよかったの
では?
len()要らないのでは?
“もじれつ”
__len__4 4
return
92017/9/8
 obj.__len__() が呼ばれるなら obj.length() でよかったの
では?
 len() はもうちょっと仕事してます
 __len__() の値がintかチェックしています
len()要らないのでは?
“もじれつ”
len()
__len__4 int?
TypeError
4
return
Yes
No
102017/9/8
len関数で、型と値をチェック!
__len__() がint以外の値を返すと..
>>> class WaruiObj:
... def __len__(self):
... return 1.2
...
>>> w = WaruiObj()
>>> len(w)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an
integer
__len__
TypeError
return
Yes
No
int?
len()
sys.maxsize を超える値を返すと
OverflowError例外を起こします。
― データモデル より
112017/9/8
 渡されたオブジェクトの __len__() APIを使って、
 取得した値をチェック、変換して、
 呼び出し元に適切な値を返す
“もじれつ” len()
int?
TypeError
Yes
No
len()関数の役割
__len____len__4 4
return
Adapter
Pattern!! 122017/9/8
Adapter Pattern(アダプター・パ
ターン)とは、GoF (Gang of Four;
4人のギャングたち) によって定義
されたデザインパターンの1つであ
る。Adapter パターンを用いると、
既存のクラスに対して修正を加え
ることなく、インタフェースを変更
することができる。
Adapter Pattern とは
Interface
交流 100V~240V
直流 20V 3.25A
Protocol
― Wikipedia より
132017/9/8
参考: 実践Python3 もオススメ
 len() 関数は、任意のオブジェクトに対してAdapterとして
作用します。
 len() は、obj.__len__() があれば、どんなオブジェクトにも
使えるAdapterです。
どのオブジェクトにも使えるlen() Adapter
任意のobject len()
__len__
TypeError
return
Yes
No
__len__
Interface
Interface
Protocol
プロトコル
異常?
142017/9/8
 list.__len__() は中に持っている要素数を返します。
 要素数はlist自身が知っています
listに len() Adapter
list:
[2, None, ‘Yo’]
len()
__len__3 int?
TypeError
3
return
Yes
No
__len__
152017/9/8
 dict.__len__() は中に持っているキーの数を返します。
 キーの数はdict自身が知っています
dictに len() Adapter
dict: {
“age”: 999,
“name”: “Hoge”
}
len()
__len__2 int?
TypeError
2
return
Yes
No
__len__
162017/9/8
 __len__() メソッドを実装した独自クラスを定義します
独自のデータ型に len() Adapter
>>> import random
>>> class Random:
... def __len__(self):
... return random.randint(0, 10)
...
>>> r = Random()
>>> len(r)
10
>>> len(r)
0
>>> len(r)
5 __len__
TypeError
return
Yes
No
int?
len()
? __len__
独自データ型
172017/9/8
任意のobject
len()
 len() は、obj.__len__() があれば動作します。
 言い換えると、長さの概念を持つオブジェクトは、
obj.__len__() を実装する必要があります。
 長さの「プロトコルを実装する」と言います。
Protocol: オブジェクトの振る舞い
__len__ int?
TypeError
return
Yes
No
__len__
Interface
Protocol
182017/9/8
 実は、Pythonの公式ドキュメントに何度か登場してます
Protocol ってどこに書いてあるの?
データモデル ― Python言語リファレンス - Python
3.6.1
組み込み型 -Python 標準ライブラリ - Python 3.6.1
組み込み関数 -Python 標準ライブラリ - Python 3.6.1
クラス -Python チュートリアル - Python 3.6
__len____len__
Protocol
192017/9/8
 Protocolの一覧などは(現在も)なさそう…
 ドキュメントへの初登場はPython-2.2 (2001年)
 PEP-544 (2017年5月)でPEPに初登場
 Protocol一覧の定義ではなく、型ヒントのため明確化
Protocolの定義はどこにあるの?
__len____len__
Protocol PEP 544 -- Protocols: Structural
subtyping (static duck typing)
PEPはPython拡張提案(Python Enhancement Proposal)を表しています。PEPは
Pythonのコミュニティに対して情報を提供したり、Pythonの新機能やプロセス、環境
などを説明するための設計書です。PEPは、技術的な仕様と、その機能が必要な論
理的な理由を提供しなければなりません。 ― PEP1 より 202017/9/8
 http://docs.python.jp/3/library/collections.abc.html
Protocol一覧の代わりに
212017/9/8
len() は Adapter
オブジェクトとAdapterが
通信する規約がプロトコル
ここまでのまとめ
222017/9/8
len()
int?
TypeError
Yes
No
Adapter、値のチェックしてるだけでしょう?
__len__4 4
return
len() 、 max() 、 min() を組み込み関数として実装す
ることで、それぞれの型のメソッドとして実装するより少
ないコードで済みます。 ― デザインと歴史 FAQ より
こういうメリットもあるよ
232017/9/8
次はもうちょっと複雑な例
(´・ω・`)ノ
242017/9/8
252017/9/8
 if文の例
 内部では自動的にbool()で変換されます
 はい、bool() 関数 Adapter です。
if 文のルール
if obj:
print(“Trueだ!”)
else:
print(“Falseだ!”)
if bool(obj):
262017/9/8
 bool関数で数値の真偽(True/False)を判別
 obj.__bool__() メソッドでしょ?
 はい(´・ω・`)
 じゃあ次は文字列で。
bool()関数に数値を渡したときに起こること
>>> bool(123)
True
>>> (123).__bool__()
True
272017/9/8
 bool関数で文字列の真偽(True/False)を判別
 obj.__bool__() メソッド
 あれっ?
bool()関数に文字を渡したときに起こること
>>> bool(“もじれつ”)
True
>>> “もじれつ”.__bool__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no
attribute '__bool__'
282017/9/8
数値や文字を bool() に変換するRule
偽と見なされる条件
クラスが __bool__() または __len__() メソッドを定
義していれば、それらのメソッドが整数 0 または
bool 値 False を返すとき。
真と見なされる条件
偽じゃないやつ ― 真偽値判定 より
bool() は len() よりも仕事してそう
292017/9/8
任意のobject
 __bool__ がない場合は、bool(len(obj)) 相当の処理を
行う
len()
bool()
Yes
bool() Adapter
__bool__
return
__len__
メソッド
ある?
No
Yes
bool型?
No
bool(value)
or
CPython での bool() の実装コード
https://github.com/python/cpython/blob/master/O
bjects/typeobject.c#L6081-L6127
302017/9/8
TypeError
 __bool__() メソッドを実装した独自クラスを定義します
 これは、正の整数ならTrueと判定されるint型です
独自のデータ型に bool() Adapter
>>> class PositiveInt(int):
... def __bool__(self):
... return self > 0
...
>>> bool(PositiveInt(10))
True
>>> bool(PositiveInt(-3)) # 0以下の値はFalse
False
>>> bool(-3) # 本来のintはマイナス値もTrue
True
312017/9/8
さらにレベル上げていくよー
(`・ω・´)
322017/9/8
332017/9/8
 for 文の例
 内部では自動的にiter()で変換されます
 はい、iter() 関数 Adapter です。
for 文のルール
for o in obj:
print(o)
for o in iter(obj):
342017/9/8
object を iter() に変換するルール
iter(object) は イテレータ (iterator) オブジェクトを返し
ます。object は反復プロトコル (__iter__() メソッド) か、
シーケンスプロトコル (引数が 0 から開始する
__getitem__() メソッド) をサポートする集合オブジェクト
でなければなりません。これらのプロトコルが両方ともサ
ポートされていない場合、 TypeError が送出されます。
― 組み込み関数 iter() より
bool() よりずっと大変そう
352017/9/8
任意のobject
iter() Adapter
iter()
Yes
__iter__
return
メソッド
ある?
No
Yes
No
イテレー
タ?
__getitem__
0から順番に obj.__getitem__()に渡
して、IndexErrorが発生するまで繰り
返すiterator実装を提供する
iteratoror
362017/9/8
Iterator
Pattern!!参考: 実践Python3
参考: Wikipedia
TypeError
iter() が返すIteratorとは
イテレータ(iterator)は、データの流れを表現するオブ
ジェクトです。イテレータの __next__() メソッドを繰り返
し呼び出す (または組み込み関数 next() に渡す) と、
流れの中の要素を一つずつ返します。データがなくなる
と、代わりに StopIteration 例外を送出します。
― 組み込み関数 iter() より
イテレータオブジェクト自体は以下の 2 つのメソッドをサ
ポートする必要があります。これらのメソッドは 2 つ合わ
せて iterator protocol: (イテレータプロトコル) を成しま
す … __next__(), __iter__() ― 用語集 iterator より
372017/9/8
 for 文の例
 内部ではこう解釈されます
for 文のルール(もうちょっと正確に)
for o in obj:
print(o)
it = iter(obj)
while True:
try:
o = next(it)
except StopIteration:
break
print(o)
はい、iter() 関数 Adapter と next() 関数 Adapterです。382017/9/8
next() Adapter と iterator
iterator
- 対象オブジェクト(リスト等)
- 位置カウンタ
対象オブジェクトから位置カウン
タを使って値を取り出して返す
iterator自体を返す
next() return
値__next__
__iter__
and
392017/9/8
class MyIterator:
def __init__(self, obj):
self.obj = obj
self.c = 0
def __next__(self):
try:
r = self.obj[self.c]
self.c += 1
return r
except IndexError:
raise StopIteration
def __iter__(self):
return self
next() return
値
iteratorの実装例
__next__
__iter__
and
402017/9/8
任意の
object
この1行で色々起きてます
for 文の1行目で起こっていること
__iter__
__getitem__
or
next()
return
値__next__
__iter__
iter()
and
iterator
objectreturn
for o in obj:
iterator protocol
組み込み型 イテレータ型 より
Protocol?
特に名称はなさそう(´・ω・`)
412017/9/8
 __iter__() メソッドを実装した独自クラスを定義します
 このコンテナをforに与えると、辞書のキーのアルファベッ
ト順に、そのキーの値が繰り返されます
独自のデータ型に iter(), next() Adapter
class MyContainer:
def __init__(self, mapping):
self.keys = sorted(mapping) # ソートして保持
self.mapping = mapping # 値返し用
def __iter__(self): # for文で呼ばれる
return MyIterator(self)
def __getitem__(self, idx): # MyIteratorから呼ばれる
return self.mapping[self.keys[idx]]
>>> list(MyContainer({'foo': 1, 'bar': 2, 'poke': 3, 'ah': 4}))
[4, 2, 1, 3] 422017/9/8
 http://docs.python.jp/3/library/collections.abc.html
 「抽象基底クラス」を継承して、Protocol実装を強制
できます
 abc はそのためのモジュール
Iterator Protoclの抽象基底クラス
432017/9/8
 継承によるInterfaceの強制
 collection.abc を継承すれば実装忘れは防げる
 対応Protocolを明示したい場合にも良い
継承によるProtocolの強制
from collections.abc import Iterator
class MyIterator(Iterator):
pass
>>> MyIterator()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class MyIterator
with abstract methods __next__
Explicit is better than implicit.
― PEP 20 -- The Zen of Python より442017/9/8
(´・ω・)おつかれさま(・ω・`)
452017/9/8
462017/9/8
 len() は Adapter Pattern
 って言われると納得感あるよね(あるよね?)
 len() ひとつ見ても、多くの経緯と議論の歴史がある
 len() vs .length の議論を頭良い人達がしてないわけない
 歴史に学ぼう
 初級から中級へ進むには
 ひたすら情報を読む、歴史を追う
 自分なりに解釈する
 Pythonで色々実装してみる
まとめ
472017/9/8
公式リファレンスに
多くの情報が載っている
原典を調べよう
PEPを読んでみよう
482017/9/8
 デザインと歴史 FAQ - Python 3.6.1 ドキュメント - Python
にメソッドを使う機能 (list.index() 等) と関数を使う機能
(len(list) 等) があるのはなぜですか?
https://docs.python.jp/3/faq/design.html#why-does-
python-use-methods-for-some-functionality-e-g-list-
index-but-functions-for-other-e-g-len-list
References: Python公式リファレンス
492017/9/8
 Python-2.4 ライブラリリファレンス イテレータ型
http://docs.python.jp/2.4/lib/typeiter.html
 バージョン 2.2 で追加
 8.3. collections — 高性能なコンテナ・データ型 - Python 2.6ja2
documentation
http://docs.python.jp/2.6/library/collections.html#abcs-
abstract-base-classes
 バージョン 2.6 で変更: 抽象基底クラス (abstract base class) の追加
 2. 組み込み関数 - Python 3.6.1 ドキュメント
http://docs.python.jp/3/library/functions.html#iter
 4. 組み込み型 - Python 3.6.1 ドキュメント
http://docs.python.jp/3/library/stdtypes.html#iterator-types
 8.4. collections.abc — コレクションの抽象基底クラス - Python
3.6.1 ドキュメント
http://docs.python.jp/3/library/collections.abc.html
References: Python公式リファレンス
502017/9/8
 PEP 1 -- PEP Purpose and Guidelines | Python.org
http://sphinx-users.jp/articles/pep1.html (和訳)
https://www.python.org/dev/peps/pep-0001
 PEP 3119 -- Introducing Abstract Base Classes | Python.org
https://www.python.org/dev/peps/pep-3119/
 PEP 544 -- Protocols: Structural subtyping (static duck typing) |
Python.org
https://www.python.org/dev/peps/pep-0544/
 PEP 20 -- The Zen of Python
http://d.hatena.ne.jp/nishiohirokazu/20120317/1331989155 (和訳)
https://www.python.org/dev/peps/pep-0020/
References: PEP
512017/9/8
 len が関数になっている理由 - methaneのブログ
http://methane.hatenablog.jp/entry/20090702/1246556675
 len が py3k でも 関数のままである理由 - methaneのブログ
http://methane.hatenablog.jp/entry/20090721/1248195293
 Solid Snakes or: How to Take 5 Weeks of Vacation - Hynek Schlawack
https://hynek.me/talks/reliability/
 オブジェクト指向と20年戦ってわかったこと – Qiita
http://qiita.com/shibukawa/items/2698b980933367ad93b4
 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるま
での軌跡 – Qiita
http://qiita.com/hirokidaichi/items/591ad96ab12938878fe1
 Python を支える技術 ディスクリプタ編 #pyconjp – Qiita
http://qiita.com/knzm/items/a8a0fead6e1706663c22
 The History of Python.jp: ユーザ定義クラスのサポートの追加
http://python-history-jp.blogspot.jp/2009/04/blog-post_30.html
 仮想継承とsingledispatch – atsuoishimoto’s diary
http://atsuoishimoto.hatenablog.com/entry/2016/08/04/095641
 The Zen of Python 解題 - 前編 – atsuoishimoto’s diary
http://atsuoishimoto.hatenablog.com/entry/20100920/1284986066
References: blog等
522017/9/8
 bool()実装
https://github.com/python/cpython/blob/1f06a680d/
Objects/typeobject.c#L6081-L6127
 真偽判定実装
https://github.com/python/cpython/blob/1f06a680d/
Objects/object.c#L1314-L1336
 len()実装
https://github.com/python/cpython/blob/1f06a680d/
Objects/typeobject.c#L5920-L5944
 len()のint値判定で呼ばれる実装
https://github.com/python/cpython/blob/1f06a680d/
Objects/abstract.c#L1238-L1275
References: CPython code
532017/9/8
 実践 Python3
http://amzn.to/2vK2uHl
 Adapter Pattern, Iterator Pattern, Protocol, …
 結城浩にインタビュー Java言語で学ぶデザインパターン
入門
http://www.hyuki.com/dp/interview.html
 かわいいフリー素材集 いらすとや
http://www.irasutoya.com/
References: その他
542017/9/8
Questions?
@shimizukawa
Grab me anytime :)
Break, Party, Sprint
2017/9/8 55
Thanks :)
2017/9/8 56
1 of 56

Recommended

エンジニアの個人ブランディングと技術組織 by
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
23.3K views40 slides
シリコンバレーの「何が」凄いのか by
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
183.9K views77 slides
Pythonによる黒魔術入門 by
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
44.4K views35 slides
PlaySQLAlchemy: SQLAlchemy入門 by
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
21.4K views91 slides
Dockerfile を書くためのベストプラクティス解説編 by
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
84.4K views51 slides
世界一わかりやすいClean Architecture by
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
47.1K views77 slides

More Related Content

What's hot

コンテナの作り方「Dockerは裏方で何をしているのか?」 by
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
30.8K views96 slides
Google Cloud で実践する SRE by
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE Google Cloud Platform - Japan
5.3K views27 slides
Python におけるドメイン駆動設計(戦術面)の勘どころ by
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
17.4K views33 slides
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料) by
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)Shota Imai
274K views159 slides
CleanArchitecture 第4部 「コンポーネントの原則」 by
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」鈴木 セシル
1.3K views53 slides
マイクロサービスにおける 非同期アーキテクチャ by
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャota42y
49K views105 slides

What's hot(20)

コンテナの作り方「Dockerは裏方で何をしているのか?」 by Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu30.8K views
Python におけるドメイン駆動設計(戦術面)の勘どころ by Junya Hayashi
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi17.4K views
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料) by Shota Imai
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai274K views
CleanArchitecture 第4部 「コンポーネントの原則」 by 鈴木 セシル
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」
鈴木 セシル1.3K views
マイクロサービスにおける 非同期アーキテクチャ by ota42y
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
ota42y49K views
マイクロにしすぎた結果がこれだよ! by mosa siru
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru132.6K views
イミュータブルデータモデル(入門編) by Yoshitaka Kawashima
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima185.8K views
ビジネスパーソンのためのDX入門講座エッセンス版 by Tokoroten Nakayama
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版
Tokoroten Nakayama52.6K views
AWSではじめるMLOps by MariOhbuchi
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
MariOhbuchi3.2K views
それはYAGNIか? それとも思考停止か? by Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima29.3K views
Python 3.9からの新定番zoneinfoを使いこなそう by Ryuji Tsutsui
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui6.9K views
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム by Kouhei Sutou
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou9.1K views
マイクロサービス 4つの分割アプローチ by 増田 亨
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨41.4K views
ストリーム処理を支えるキューイングシステムの選び方 by Yoshiyasu SAEKI
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI40.2K views
DockerコンテナでGitを使う by Kazuhiro Suga
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga18.8K views
分散システムについて語らせてくれ by Kumazaki Hiroki
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki119.4K views
メタプログラミングって何だろう by Kota Mizushima
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima28.7K views

Viewers also liked

仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016 by
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
4K views64 slides
JUS関西 Sphinxワークショップ@関西 Sphinx紹介 by
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介Takayuki Shimizukawa
8.8K views71 slides
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み by
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組みTakayuki Shimizukawa
28.1K views62 slides
素振りのススメ at Python入門者の集い by
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
8.6K views26 slides
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016 by
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Takayuki Shimizukawa
3.1K views66 slides
世界のSphinx事情 @ SphinxCon JP 2015 by
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
3.4K views22 slides

Viewers also liked(16)

仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016 by Takayuki Shimizukawa
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
JUS関西 Sphinxワークショップ@関西 Sphinx紹介 by Takayuki Shimizukawa
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み by Takayuki Shimizukawa
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Takayuki Shimizukawa28.1K views
素振りのススメ at Python入門者の集い by Takayuki Shimizukawa
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016 by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Sappo ro#6資料2 ー完全版ー by Wakana_kudo
Sappo ro#6資料2 ー完全版ーSappo ro#6資料2 ー完全版ー
Sappo ro#6資料2 ー完全版ー
Wakana_kudo8.5K views
音声生成の基礎と音声学 by Akinori Ito
音声生成の基礎と音声学音声生成の基礎と音声学
音声生成の基礎と音声学
Akinori Ito28.3K views
R6パッケージの紹介―機能と実装 by __nakamichi__
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__27.5K views
Prophet入門【理論編】Facebookの時系列予測ツール by hoxo_m
Prophet入門【理論編】Facebookの時系列予測ツールProphet入門【理論編】Facebookの時系列予測ツール
Prophet入門【理論編】Facebookの時系列予測ツール
hoxo_m44.6K views
Prophet入門【R編】Facebookの時系列予測ツール by hoxo_m
Prophet入門【R編】Facebookの時系列予測ツールProphet入門【R編】Facebookの時系列予測ツール
Prophet入門【R編】Facebookの時系列予測ツール
hoxo_m38.6K views
Prophet入門【Python編】Facebookの時系列予測ツール by hoxo_m
Prophet入門【Python編】Facebookの時系列予測ツールProphet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツール
hoxo_m64.6K views
サルでもわかるディープラーニング入門 (2017年) (In Japanese) by Toshihiko Yamakami
サルでもわかるディープラーニング入門 (2017年) (In Japanese)サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)
Toshihiko Yamakami56K views
受託の会社が調達せずに自社サービスを立ち上げ事業として成立するまでの企画・開発・サポート・マーケティング by Yusuke Tamukai
受託の会社が調達せずに自社サービスを立ち上げ事業として成立するまでの企画・開発・サポート・マーケティング受託の会社が調達せずに自社サービスを立ち上げ事業として成立するまでの企画・開発・サポート・マーケティング
受託の会社が調達せずに自社サービスを立ち上げ事業として成立するまでの企画・開発・サポート・マーケティング
Yusuke Tamukai79.4K views
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法 by Nagi Teramo
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo35K views
深層学習フレームワークChainerの特徴 by Yuya Unno
深層学習フレームワークChainerの特徴深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴
Yuya Unno59.4K views

Similar to Pythonはどうやってlen関数で長さを手にいれているの?

20170131 python3 6 PEP526 by
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526 masahitojp
3.3K views35 slides
LLdeade Python Language Update by
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language UpdateAtsushi Shibata
2.4K views30 slides
Pythonスタートアップ勉強会201109 python入門 by
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Takayuki Shimizukawa
13K views26 slides
エキ Py 読書会02 2章前半 by
エキ Py 読書会02 2章前半エキ Py 読書会02 2章前半
エキ Py 読書会02 2章前半Tetsuya Morimoto
1K views11 slides
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) by
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) kunihikokaneko1
960 views49 slides
PythonistaがOCamlを実用する方法 by
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法Yosuke Onoue
2.8K views14 slides

Similar to Pythonはどうやってlen関数で長さを手にいれているの?(20)

20170131 python3 6 PEP526 by masahitojp
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
masahitojp3.3K views
LLdeade Python Language Update by Atsushi Shibata
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language Update
Atsushi Shibata2.4K views
Pythonスタートアップ勉強会201109 python入門 by Takayuki Shimizukawa
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) by kunihikokaneko1
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
kunihikokaneko1960 views
PythonistaがOCamlを実用する方法 by Yosuke Onoue
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue2.8K views
PostgreSQLとpython by Soudai Sone
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpython
Soudai Sone14.2K views
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ. by kiki utagawa
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa19.7K views
ひのきのぼうだけで全クリ目指す by AromaBlack
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
AromaBlack1.5K views
研究生のためのC++ no.2 by Tomohiro Namba
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba430 views
boost::shared_ptr tutorial by NU_Pan
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorial
NU_Pan2.9K views
LT3「Python を使ってExcel ファイルの修正」 by Takeshi Akutsu
LT3「Python を使ってExcel ファイルの修正」LT3「Python を使ってExcel ファイルの修正」
LT3「Python を使ってExcel ファイルの修正」
Takeshi Akutsu613 views
openpyxlの使い方 by ysakaguchi
openpyxlの使い方openpyxlの使い方
openpyxlの使い方
ysakaguchi2.6K views
Pythonによる機械学習入門〜基礎からDeep Learningまで〜 by Yasutomo Kawanishi
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Yasutomo Kawanishi58.9K views
Getting Started with Graph Database with Python by ロフト くん
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
ロフト くん402 views
TVMの次期グラフIR Relayの紹介 by Takeo Imai
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介
Takeo Imai5.4K views
Python languageupdate (2004) by 泰 増田
Python languageupdate (2004)Python languageupdate (2004)
Python languageupdate (2004)
泰 増田491 views
Wrapping a C++ library with Cython by fuzzysphere
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cython
fuzzysphere4.1K views

More from Takayuki Shimizukawa

IKEv2-VPN PyHackCon2023 by
IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023Takayuki Shimizukawa
20 views23 slides
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう by
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
189 views52 slides
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022 by
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022Takayuki Shimizukawa
1.5K views46 slides
Webアプリを並行開発する際のマイグレーション戦略 by
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
4.8K views49 slides
『自走プログラマー』 が我々に必要だった理由 by
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由Takayuki Shimizukawa
739 views22 slides
エキスパートPythonプログラミング改訂3版の読みどころ by
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころTakayuki Shimizukawa
1.8K views23 slides

More from Takayuki Shimizukawa(20)

Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう by Takayuki Shimizukawa
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022 by Takayuki Shimizukawa
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Webアプリを並行開発する際のマイグレーション戦略 by Takayuki Shimizukawa
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
『自走プログラマー』 が我々に必要だった理由 by Takayuki Shimizukawa
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
エキスパートPythonプログラミング改訂3版の読みどころ by Takayuki Shimizukawa
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
RLSを用いたマルチテナント実装 for Django by Takayuki Shimizukawa
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
【修正版】Django + SQLAlchemy: シンプルWay by Takayuki Shimizukawa
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa11.2K views
Sphinx customization for OGP support at SphinxCon JP 2018 by Takayuki Shimizukawa
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx autodoc - automated api documentation - PyCon.KR 2015 by Takayuki Shimizukawa
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Easy contributable internationalization process with Sphinx @ pyconmy2015 by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015 by Takayuki Shimizukawa
Sphinx autodoc - automated api documentation - PyCon.MY 2015Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao) by Takayuki Shimizukawa
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Easy contributable internationalization process with Sphinx @ pyconsg2015 by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx @ pyconsg2015Easy contributable internationalization process with Sphinx @ pyconsg2015
Easy contributable internationalization process with Sphinx @ pyconsg2015
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan) by Takayuki Shimizukawa
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ... by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93 by Takayuki Shimizukawa
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 by Takayuki Shimizukawa
PyPro2の読みどころ紹介:Python開発の過去と現在PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在
Takayuki Shimizukawa11.9K views

Recently uploaded

SNMPセキュリティ超入門 by
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門mkoda
188 views15 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
76 views41 slides
さくらのひやおろし2023 by
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
94 views58 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
184 views13 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
50 views29 slides
JJUG CCC.pptx by
JJUG CCC.pptxJJUG CCC.pptx
JJUG CCC.pptxKanta Sasaki
6 views14 slides

Recently uploaded(11)

SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda188 views
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka76 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之94 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4184 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.50 views
Web3 Career_クレデン資料 .pdf by nanamatsuo
Web3 Career_クレデン資料 .pdfWeb3 Career_クレデン資料 .pdf
Web3 Career_クレデン資料 .pdf
nanamatsuo14 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
01Booster Studio ご紹介資料 by ssusere7a2172
01Booster Studio ご紹介資料01Booster Studio ご紹介資料
01Booster Studio ご紹介資料
ssusere7a2172345 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化 by Knowledge & Experience
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化

Pythonはどうやってlen関数で長さを手にいれているの?