yohhoyの日記

技術的メモをしていきたい日記

(翻訳)書籍"Effective Python" アイテム一覧

Brett Slatkin氏による書籍 "Effective Python: 59 Specific Ways to Write Better Python" より、アイテム一覧(目次)を抄訳。Python 2.x/3.x両バージョンを対象とする。

第1章: パイソニック思考(Pythonic Thinking)
1. 使っているPythonバージョンを知ろう
2. PEP 8 スタイルガイドに従おう
3. bytes, str, unicodeの違いを知ろう
4. 複雑な式の代わりにヘルパ関数を書こう
5. シーケンスのスライス方法を知ろう
6. 単一のスライスではstart, end, stride利用を避ける
7. mapやfilterの代わりにリスト内包表記を使おう
8. リスト内包表記では2個以上の式を避ける
9. 大きな内包ではジェネレータ式を検討しよう
10. rangeよりもenumerateを使おう
11. 複数イテレータを同時処理するならzipを使おう
12. for, whileループ後のelseブロックは避ける
13. try/except/else/finallyブロックをそれぞれ活用しよう

第2章: 関数(Functions)
14. Noneを返すよりも例外を使おう
15. クロージャと変数スコープの関係を知ろう
16. リストを返す代わりにジェネレータを検討しよう
17. 引数を介したイテレーションは防御的に行う (→サンプル
18. 位置指定引数(positional argument)では視覚的ノイズを減らす
19. キーワード引数を使ってオプション機能を提供する
20. 動的デフォルト引数ではNoneとドキュメンテーション文字列(docstring)を使おう
21. キーワードのみの引数(keyword-only argument)を使って明確にする

第3章: クラスと継承(Classes and Inheritance)
22. 辞書型やタプル型で処理するよりもヘルパクラスを使おう
23. 単純なインタフェースではクラスの代わりに関数を受けよう (→サンプル
24. ジェネリックなオブジェクト構築には@classmethodポリモーフィズムを使おう
25. 親クラスはsuperを使って初期化しよう
26. 多重継承はMix-inユーティリティクラスでのみ使おう
27. プライベートな属性よりもパブリックを使おう
28. 自作のコンテナ型はcollections.abcから継承しよう

第4章: メタクラスと属性(Metaclasses and Attributes)
29. Get/Setメソッドの代わりに通常の属性を使おう
30. 属性をリファクタリングする代わりに@propertyを検討しよう
31. 再利用可能な@propertyメソッドにはディスクリプタ(descriptor)を使おう
32. 遅延評価属性(lazy attribute)には__getattr__, __getattribute__, __setattr__を使おう
33. メタクラスを使ってサブクラスを検証する
34. メタクラスを使ってクラスの存在を登録する (→サンプル
35. メタクラスを使ってクラス属性に註釈をつける

第5章: 並行性と並列性(Concurrency and Parallelism)
36. 子プロセス管理にはsubprocessを使おう
37. スレッドはブロッキングI/Oに使い、並列処理は避ける
38. スレッドでのデータ競合を防ぐためにLockを使おう
39. スレッド間の協調作業にはQueueを使おう
40. 大量の関数を並行実行するならコルーチンを検討しよう (→サンプル
41. 真の並列処理にはconcurrent.futuresを検討しよう

第6章: 組み込みモジュール(Built-in Modules)
42. functools.wrapsを使って関数デコレータを定義する
43. 再利用可能なtry/finallyの振る舞いにはcontextlibとwith構文を検討しよう
44. copyregを使ってpickleの信頼性を上げる
45. ローカルクロックにはtimeの代わりにdatetimeを使おう
46. 組み込みアルゴリズムとデータ構造を使おう
47. 演算精度が重要なケースではdecimalを使おう
48. コミュニティーによるモジュールの探し方を知ろう

第7章: コラボレーション(Collaboration)
49. 全ての関数、クラス、モジュールにドキュメンテーション文字列を書く
50. モジュールの構成と安定したAPI提供にパッケージを使おう
51. APIと呼び出し元を分離するためにルート例外を定義する
52. 循環依存性を切る方法を知ろう
53. 独立性と再現可能な依存性のために仮想環境を使おう (→サンプル

第8章: プロダクション(Production)
54. 開発環境構成のためにモジュールスコープのコードを検討しよう
55. デバッグ用出力にはrepr文字列を使おう
56. あらゆるものをunittestでテストする
57. pdbによるインタラクティブデバッグを検討しよう
58. 最適化より前に計測を行う
59. メモリ利用やリークの解析にはtracemallocを使おう