Effective Python読みました記事書くよ!

2016年4月26日火曜日

python

t f B! P L

部分的に拾って感想を書いていく。よくわかったところと、とりあえず流したところがあった雑な感想。コードも書かぬ。

1章 python流思考

「map、filterを使うでない、リスト内包表記を使うのじゃ」
みたいな結構いろんな本とかブログとかで見かけることが多め。
またmapさんとfilterさんがリスト内包表記さんのやられ役になっておられる……
そろそろreduceさんみたいに左遷されるのではないかと思っている。

1つのスライスでstart, end, stribeは結構やっちゃうことなのでこれからは気をつけていきたい。

pep8スタイルガイドはvimにSyntastic入れてflake8を使うと文法のエラーとスタイルガイドの両方を自動でチェックできて捗ると思います。

2章 関数

「Noneを返すより例外」は確かにその通りなので反省します。とりあえずNoneはやっぱりよくなかった。

クロージャのスコープの話と__call__を実装したクラスを使うのは参考になった。内側の関数の中で外側の変数に値を代入する必要があるときはnonlocalを使うかクラス化する。

3章 クラスと継承

ここでも__call__がでてくる。

プライベートよりパプリック。個人的にはわかりやすい。

4章 メタクラスと属性

個人的には一番参考になった章。
get_hogeとかset_hogeとかやらない。@propertyを使う

5章 並行性と並列性

threadはCPU的には並列ではなくてループをたくさん回す計算処理には向かないけどブロッキングI/Oみたいなpythonの外側にボトルネックがあるときは役に立つ。
コルーチンというyieldを使った並列。
multiprocessingというちゃんとした並列。
この章はこうすればミスが少ないとかそういうtips集ではなくて並列入門な感じがする。

6章 組み込みモジュール

デコレータを使って作った関数をhelp関数に入れた時に期待していた名前が出てこない問題を初めて知った。functools.wrapsを頭の片隅に入れておく。

"組み込みのアルゴリズムとデータ構造を使う"のは当然だと思うけど実践は難しい。あれするためにあの機能が必要だな、pythonなんだからきっとあるだろう。いつもこんな感じでググってる。

7章 共同作業(コラボレーション)

ドキュメンテーション文字列を書く。
virtualenvは必須。

8章 本番運用準備

インスタンスをprintの引数にしたとき、デフォルトだと<__main__.hoge object at 0xごにょごにょ>と出てあまり役に立たないから必要に応じて__repr__を定義する。

unittest大事。mockというライブラリを使うともっと捗ると思います。

cProfileという最適化に便利なモジュールがある。速度低下の原因がどの部分かのヒントが得られる。

おわり

大変参考になった。これから書くコードには多分きっと少しずつ反映されている。

でも過去に作ったオレオレツール群の改善はせぬ。こういうのは一切手を付けず、本当に動かなくなるまで放置するのだ。

QooQ