『Effective Python』は目次にピンときたら読むべき本

『Effective Python ――Pythonプログラムを改良する59項目』は文字通り効果的(Effective)なPythonプログラムを書くためのベストプラクティス、ノウハウをまとめた本。 Effective Python ―Pythonプログラムを改良する59項目Brett Slatkin オライリージャパン 売り上げランキング: 43,774Amazon.co.jpで詳細を見る GitHubでサンプルコードが公開されています。

bslatkin/effectivepython: Effective Python: Source Code and Errata for the Book

まずは目次で項目を確認してから買うかどうかを決めるのがおすすめ。

目次(項目一覧) オライリー・ジャパンの公式サイトに目次が掲載されています。項目が見出しになっているので59項目すべてが確認できます。

O'Reilly Japan - Effective Python 1章  Python流思考(Pythonic Thinking) 項目 1:使っている Pythonのバージョンを知っておく 項目 2:PEP 8スタイルガイドに従う 項目 3:bytes, str, unicodeの違いを知っておく 項目 4:複雑な式の代わりにヘルパー関数を書く 項目 5:シーケンスをどのようにスライスするか知っておく 項目 6:1つのスライスでは、 start, end, strideを使わない 項目 7:mapやfilterの代わりにリスト内包表記を使う 項目 8:リスト内包表記には、 3つ以上の式を避ける 項目 9:大きな内包表記にはジェネレータ式を考える 項目 10:rangeよりは enumerateにする 項目 11:イテレータを並列に処理するには zipを使う 項目 12:forとwhileループの後の elseブロックは使うのを避ける 項目 13:try/except/else/finallyの各ブロックを活用する
2章 関数 項目 14:Noneを返すよりは例外を選ぶ 項目 15:クロージャが変数スコープとどう関わるかを知っておく 項目 16:リストを返さずにジェネレータを返すことを考える 項目 17:引数に対してイテレータを使うときには確実さを尊ぶ 項目 18:可変長位置引数を使って、見た目をすっきりさせる 項目 19:キーワード引数にオプションの振る舞いを与える 項目 20:動的なデフォルト引数を指定するときには Noneとドキュメンテーション文字列を使う 項目 21:キーワード専用引数で明確さを高める
3章 クラスと継承 項目 22:辞書やタプルで記録管理するよりもヘルパークラスを使う 項目 23:単純なインタフェースにはクラスの代わりに関数を使う 項目 24:@classmethodポリモルフィズムを使ってオブジェクトをジェネリックに 項目 25:親クラスを superを使って初期化する 項目 26:多重継承は mix-inユーティリティクラスだけに使う 項目 27:プライベート属性よりはパブリック属性が好ましい 項目 28:カスタムコンテナ型は collections.abcを継承する
4章 メタクラスと属性 項目 29:getやsetメソッドよりも素のままの属性を使う 項目 30:属性をリファクタリングする代わりに @propertyを考える 項目 31:再利用可能な @propertyメソッドにディスクリプタを使う 項目 32:遅延属性には getattr, getattribute, __setattr__を使う 項目 33:サブクラスをメタクラスで検証する 項目 34:クラスの存在をメタクラスで登録する 項目 35:クラス属性をメタクラスで注釈する
5章 並行性と並列性 項目 36:subprocessを使って子プロセスを管理する 項目 37:スレッドはブロッキング I/Oに使い、並列性に使うのは避ける 項目 38:スレッドでのデータ競合を防ぐために Lockを使う 項目 39:スレッド間の協調作業には Queueを使う 項目 40:多くの関数を並行に実行するにはコルーチンを考える 項目 41:本当の並列性のために concurrent.futuresを考える
6章 組み込みモジュール 項目 42:functools.wrapsを使って関数デコレータを定義する 項目 43:contextlibとwith文を try/finallyの代わりに考える 項目 44:copyregでpickleを信頼できるようにする 項目 45:ローカルクロックには timeではなく datetimeを使う 項目 46:組み込みアルゴリズムとデータ構造を使う 項目 47:精度が特に重要な場合は decimalを使う 項目 48:コミュニティ作成モジュールをどこで見つけられるかを知っておく
7章 協働作業(コラボレーション) 項目 49:すべての関数、クラス、モジュールについてドキュメンテーション文字列を書く 項目 50:モジュールの構成にパッケージを用い、安定な APIを提供する 項目 51:APIからの呼び出し元を隔離するために、ルート例外を定義する 項目 52:循環依存をどのようにして止めるか知っておく 項目 53:隔離された複製可能な依存関係のために仮想環境を使う
8章 本番運用準備 項目 54:本番環境を構成するのにモジュールスコープのコードを考える 項目 55:出力のデバッグには、 repr文字列を使う 項目 56:unittestですべてをテストする 項目 57:pdbで対話的にデバッグすることを考える 項目 58:最適化の前にプロファイル 項目 59:メモリの使用とリークを理解するには tracemallocを使う

英語版の目次は以下の公式サイトで確認できます。

Effective Python › The Book

こんな人にはオススメ 目次を見て気になる項目があれば買って損はない。

1章 Python流思考(Pythonic Thinking) 2章 関数

は、基本的ながら見落としがちな項目が多い。また、

3章 クラスと継承 4章 メタクラスと属性 5章 並行性と並列性 6章 組み込みモジュール

は、ほかのPython書籍ではあまり触れられていない実践的な内容。 どの項目もサンプルコードともに「なぜこのようにすべきなのか」という理由(筆者の考え)がちゃんと書かれていて納得感があります。 それぞれの項目は独立しているので、気になるところだけ読むという読み方でも問題ありません。

こんな人にはオススメできない 目次の項目を見ても何が何だか分からなければ、あわてて読む必要はない。 訳者あとがきに「想定読者をかなり広く、初心者、場合によっては、Pythonが初めてという方も考えて、訳注などを付けてあります。」とあったが、Python初学者がいきなり読むのは厳しいのではないかと思います。

項目 7:mapやfilterの代わりにリスト内包表記を使う 項目 9:大きな内包表記にはジェネレータ式を考える 項目 18:可変長位置引数を使って、見た目をすっきりさせる

あたりは早めに知っておいたほうがいいかもしれないが、いきなりこの本を読むよりも他の入門書的な本で基本的な文法を把握してから読んだほうが理解しやすいと思います。 Python初心者向けの入門書としては『みんなのPython』がおすすめ。

まとめ 公開されている目次で項目を確認してから買うかどうかを決めるのがいい。 「なぜそれが効果的(Effective)なんだろう?」と疑問に思う項目があれば読んでみてほしい。 Effective Python ―Pythonプログラムを改良する59項目Brett Slatkin オライリージャパン 売り上げランキング: 43,774Amazon.co.jpで詳細を見る 原著(英語)はKindle版あり。2018/05/08時点で2,298円と日本語単行本(3,456円)より安い。 Effective Python: 59 Specific Ways to Write Better Python (Effective Software Development Series)Addison-Wesley Professional (2015-02-12)Amazon.co.jpで詳細を見る

Last Updated: 6/26/2019, 10:34:03 PM