_log

備忘録

Effective Python 読んだ感想

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

Python歴約1年の今、以下の2点を目的として読んだ

  • 現状の知識整理
  • Pythonic Thinkingについて学習

本書はその目的に沿う本で、今のタイミングで読むことができて良かった

以下、トピック毎に軽く感想

PEP8スタイルガイド

  • 項目2 PEP8スタイルガイドに従う

Python始めた時に、最初にいいなと思ったのがPEP8(とThe Zen of Python)だった
本質から離れた箇所に体力を使わないのはとても良い
特にチーム開発において、ある程度統一したスタイルでコードを書くことは生産性の向上に繋がる
flake8とか、チェッカーを使うと更に幸せ。エディタでも検知できる仕組みが色々ある

リスト内包表記

  • 項目7 mapやfilterの代わりにリスト内包表記を使う
  • 項目8 リスト内包表記には、3つ以上の式を避ける
  • 項目9 大きな内包表記にはジェネレーター式を考える

Pythonでもリスト内包表記が使用可能で、
最初は少し戸惑うかもしれないけれど、慣れればコードがシンプルになる
節度は守るべしで、そのバランス感覚についての話

イテレータ

  • 項目16 リストを返さずにイテレータを返すことを考える
  • 項目17 引数に対してイテレータを使う時には確実さを尊ぶ

イテレータプロトコル(__iter__メソッドの実装)が面白い
複数回呼び出されることを許容できるケースにあまり出くわさなそうではある

メタクラス

イマイチ理解しきれていなかったメタクラスだが、
具体的なケースでどのように使われるかが紹介されていて分かりやすい

実際どのように使われているのか気になって、GitHubで探してたら
例えばFlaskだと↓のように使われている
https://github.com/pallets/flask/blob/740c42217cb349ab4f03ecba37973ec0c9bed421/flask/views.py#L105-L120

ツール

  • 項目56 unittestですべてをテストする
  • 項目57 pdbで対話的にデバッグすることを考える
  • 項目58 最適化の前にプロファイル
  • 項目59 メモリの使用とリークを理解するにはtracemallocを使う

Pythonの組み込みモジュールはデバッグ、テスト、最適化まで提供されている
言語仕様だけでなく、組み込みモジュールまで一貫して機能が揃えようとしていることにもPythonの思想を感じられて良い
他にもプログラム周りの組み込みモジュールについては第6章で取り上げられている

おわりに

全部取り上げると無駄に長編になってしまうのでこの辺で…
他にも様々な思想やTipsが取り上げらているが、どれもPythonicな考えが染み込んでいる
理解を深めるために別途手を動かしながら読み直したい。特に第5章