パーフェクトPythonを読んだ
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 47回
- この商品を含むブログ (2件) を見る
1冊で言語仕様から最新の技術までを網羅した内容。網羅的に解説されているだけでなく、各技術に関しては基本からしっかり解説し、必要な箇所では、技術の進歩によってブラックボックス化が進んだ、内部処理が裏で何をしているのかを掘り下げて解説してあるため、体系的に知りたい初心者はもちろん中級者にもお勧めの一冊です.最新のPython3.3に対応
Python 3系を意識しているとか、言語仕様や周辺ライブラリの紹介ってのもあるけど、なにより Pythonic な文化であるとか習慣であるとか、それこそ「Zen of Python」が日本語でここまで語られていることが貴重な書籍だと感じた。
以下は細々としたメモ。書き起こしてみたらだいぶ頭が弱い感じがする文章になってるけど、まあ、はい。
with と context manager について
with open() as f っていうのはもはやイディオムになってるんだけど、たとえば fabric での cd コマンドでも context manager を使ってたりする。内部的には __open__ __exit__ などを呼ぶことで状態を管理できるというのはなんとなく調べたときに知ってたけど、少し整理がついた。
mro と superclass
これはどの言語でもある話だろうけど、最近 Django の class base view が mixin しまくっててよくわからなかったので調べていた。そのときに「誰が親クラスなのか」「その関数は誰のものなのか」というのを探すとき、mro が役に立つ。
文字列とバイト列
たぶん Python を触るといやでも出くわすのがこれで、文字列だとおもったらバイト列で UTF-8 になってなくて UnicodeDecodeError とかはよくある。最近だと mesasge pack の話があったけど、マルチバイトなことを意識されてないコードとかわりとある。まあ実際 ascii(というか laten-1 ?) な文字列を扱う分にはたしかに不自由がない。文字の扱いについてやりだすとだいぶ面倒なので*1避けてたところあるけど、すこし整理がついた。
C拡張
たとえば PIL あたりとか cPickle とかだと C の拡張を使うことになるというのはいいけど、それが具体的にどうやってるのかを知れて「へー」と思った。
nonlocal とクロージャ
JS だとよくあるクロージャを Python でやるとき、nonlocal で一番近い変数を探しにいくところでつかえるというのはちょっとおもしろかった。ただ、それが Python としてどう使えるのかはよくわからないけれど。
proprety アクセス
@property や @property.setter みたいな話。前 Python/Django の property をどう扱えばいいかモヒカンさんに相談した話 - AtAsAtAmAtArA というのをかいたとき「とりあえず関数に倒しておくのが無難。でも状態が変わってないのならプロパティと明示してもいいんじゃないの」とあった。たぶん JavaScript においてのプロパティって話と、そもそも C みたいにプロパティアクセスがないという考え方を知らなかったので*2これもすこし整理がついた。