内部実装を読んで理解する『len()関数がオブジェクトの長さを手にいれる仕組み』 #pyconjp #pyconjp_203
len()関数がオブジェクトの長さを手にいれる仕組み
Takayuki Shimizukawa @shimizukawa
Pythonには文字列やリストなど、長さをもつオブジェクトがあります。長さを手に入れるには、文字列なら、name.length ではなく len(name) のようにlen関数を使います。len関数はどうやってnameに入っているオブジェクトの長さを手に入れているのでしょうか。if文にはTrue/Falseとなる条件式を指定しますが、それだけでなく文字や数字、自分で作ったデータ型も渡せます。if文はどうやって与えられたオブジェクトがTrueなのかFalseなのかを手に入れているのでしょうか。 この発表では、Pythonのプログラムがどうやって必要な情報を手に入れているのか、また、自分で実装するときにどう実装すればlen()やif文やfor文に指定できるのかを説明します。
susumuis/いしがみプロ
@susumuis
bool関数ではなくAdapter __bool__()または__len__()がFalseまたは0を返す時:偽、それ以外:真 #pyconjp_203
2017-09-08 14:19:22
Λlisue
@lambdalisue
Protocol は Python 3.7 で typing に導入されるんじゃなかったけか(今言ってるものとは別)。だから今までの Protocol ってのが指すものと今後指すものは変わると思う #pyconjp_203
2017-09-08 14:19:41
くーむ@( o・ω・)ノ
@cocodrips
bool()は__bool__がない場合はbool(len(obj))相当の処理を行う #pyconjp_203
2017-09-08 14:19:43
さわでぃさん🍅🦒🗼🐴💻⚓
@sawadyrr5
bool()はまずobjが__bool__を実装しているか調べて、してなかったら__len__を調べるから、空リストはFalseなんだな #pyconjp_203
2017-09-08 14:20:36
npub1hqmrddql4em63chfs02x8cx86alrdss9m4kxevpjzwwgc
@ryu22e
初級++++ #PyConJP #pyconjp_203
2017-09-08 14:21:06
麻木浅葱 / ARメタバース
@asagi_00a3af
#pyconjp #pyconjp_203 「初級から中級にするわけには行かないのでこの話の難易度は初級++++」
2017-09-08 14:21:13
くーむ@( o・ω・)ノ
@cocodrips
boolの実装 "cpython/typeobject.c at master · python/cpython - github.com/python/cpython…" #pyconjp_203
2017-09-08 14:21:14
SHIMIZU Taku
@takuan_osho
lv表記を上げるわけにはいかなかったから+の方を増やして「初級++++」とやっているのには笑う #pyconjp #pyconjp_203
2017-09-08 14:21:28