俵言

しがない社会人が書く、勉強とかのこと。最近は機械学習や kaggle 関連がメイン。

感想文:Pythonトリック ~真に効果的なPythonプログラミング手法~

最近全くブログを書いてないのでリハビリとして読書感想文を書くことにしました。よくよく考えると本をちゃんと全部読み切ったのもかなり久々かも。

最近まで「Kaggle!」「機械学習!」みたいなテンションを続けていたのに少し疲れてしまった感があり、こう、すぐ役立つかわからないけど興味本位で基礎的な知識を入れるという行為をしたくなったんだと思います*1

読んだ本

Pythonトリック

Pythonトリック

  • 作者:Dan Bader
  • 発売日: 2020/04/15
  • メディア: 単行本(ソフトカバー)

去年の4月に発売された本です。その少し前に出た 自走プログラマー ~Pythonの先輩が教えるプロジェクト開発のベストプラクティス120 と一緒に買ったのですが、気づけば積んだまま一年経ってました😇

あらゆる場面で活躍するプログラミング言語Python。 本書はそんなPythonをマスターし、日々のプログラミングに活用したい熱心な方々のための1冊です。

入門書を一通り終えた駆け出しプログラマには、Pythonの機能や特徴をより深く、 また他言語から新たにPython習得を目論むベテランには、コードの書き方の差異を、 リスト内包や文字列フォーマットなど、さまざまなサンプルを元に教授してくれます。

著者のDan Baderは、Twitterでのアウトプットに端を発する、いわゆるTips紹介の延長線上で、この本を執筆しました。 そのため、各種Tipsに対するさまざまなフィードバックと、よりよく伝えるためのアイデアが盛り込まれ、 結果、Pythonをより深く知り、より良いコードを書くための知識が集積された書籍となりました。

つまり本書は、もっとすごいPython開発者になりたいあなたを、 強力にサポートする1冊です。

雑に内容紹介すると、細かいけど知っておくと役に立つ tips や、Python 上級者たちが使いこなしているであろう強力な機能、仕様に一歩踏み込んだ Python 知識を集めた本です。長年 Python を使っている割に使いこなしている気になれない僕にはちょうど良い本だったのかなと思います。

対象読者

本文中でも明言されているのですが、この本は Python をある程度使っている Pythonista がレベルアップするための本という位置づけです。初心者がいきなりこの本を読むのはかなりハードルが高く、その場合は別の本を読んだ方が良いと思います。

一方で、以下の目次を読んだときに「人のコードで見たことあるけど使い方はよく知らないな」「使ったことあるけど仕組みをよくわかってないな」ってなる人にはかなりお勧めしたい本です*2

CHAPTER 1 はじめに

1.1 Pythonトリックとは何か

1.2 本書はどのように役立つか

1.3 本書の読み方

 

CHAPTER 2 よりクリーンなPythonのためのパターン

2.1 アサーションによる安全対策

2.2 無頓着なコンマの配置

2.3 コンテキストマネージャーとwith文

2.4 アンダースコアとダンダー

2.5 文字列のフォーマットに関する衝撃の事実

2.6 「The Zen of Python」の隠しコマンド

 

CHAPTER 3 効果的な関数

3.1 Pythonの関数はファーストクラスオブジェクト

3.2 ラムダは単一式の関数

3.3 デコレータの威力

3.4 *argsと**kwargs

3.5 引数のアンパック

3.6 ここから返すものは何もない

 

CHAPTER 4 クラスとオブジェクト指向プログラミング

4.1 オブジェクトの比較:”is”と”==”

4.2 文字列変換:すべてのクラスにreprが必要

4.3 カスタム例外クラスを定義する

4.4 趣味と実益を兼ねたクローンオブジェクトの作成

4.5 抽象基底クラスは継承に待ったをかける

4.6 名前付きタプルは何に役立つか

4.7 クラス変数とインスタンス変数の落とし穴

4.8 インスタンスメソッド、クラスメソッド、静的メソッドの謎を解く

 

CHAPTER 5 Pythonの一般的なデータ構造

5.1 ディクショナリ、マップ、ハッシュテーブル

5.2 配列

5.3 レコード、構造体、DTO

5.4 セットとマルチセット

5.5 スタック(LIFO

5.6 キュー(FIFO

5.7 優先度付きキュー

 

CHAPTER 6 ループとイテレーション

6.1 パイソニックなループの書き方

6.2 内包を理解する

6.3 リストのスライスとすし演算子

6.4 美しいイテレータ

6.5 ジェネレータは単純化されたイテレータ

6.6 ジェネレータ式

6.7 イテレータチェーン

 

CHAPTER 7 ディクショナリのトリック

7.1 ディクショナリのデフォルト値

7.2 趣味と実益を兼ねたディクショナリのソート

7.3 ディクショナリを使ってswitch/case文をエミュレートする

7.4 型破りなディクショナリ式

7.5 ディクショナリのいろいろなマージ法

7.6 ディクショナリの出力を整える

 

CHAPTER 8 パイソニックな生産性向上テクニック

8.1 Pythonのモジュールとオブジェクトを調べる

8.2 仮想環境を使ってプロジェクトの依存関係を分離する

8.3 バイトコードの裏側を覗く

 

CHAPTER 9 最後に

9.1 Python開発者のためのメールマガジン

9.2 PythonistaCafe:Python開発者のコミュニティ

おすすめポイント

個人的にとてもありがたかったのは コンテキストマネージャー、デコレータ、yield 文 が解説されていたことでした。これらは僕の中の「見たことあるけど使いこなせてない Python の機能ランキング」top10 に間違いなく入る機能達*3ですが、この本を読んだことで初めて使い方を理解できた気がします。

Python の基礎知識を深める内容としては、関数がファーストクラスオブジェクトである点、クラスの一歩踏み込んだ理解、データ構造の比較 あたりもおすすめです。ここら辺の内容は結構知っている部分も多かったのですが、改めてまとまった説明を読むと再発見があって楽しく読めました。

Tips としては アンダースコアの意味、引数のアンパックあたりが意外と知られてないことがある気がします。また、個人的にはイテレータチェーンでパイプラインを作る話がとても衝撃的で、イテレータへの理解が深まった気がします。

全体としては、各項目について簡単な例でわかりやすく説明していることと、ユースケースや著者のベストプラクティスが記載されているのが良い点だと思っています。機能を沢山紹介されるとどれを使っていいのか迷いがちなんですが、そこに関してもアドバイスがあるのはとてもありがたいです。

おわりに

書きすぎると本の中身をそのまま紹介しそうなのでここらへんで筆を置きます。

僕のように目次の中に「見たことあるけど使いこなせていない機能」がある方は是非とも読んでいただきたいです。ページ数も200ページとそんなに多くなく、Python をある程度使える人がステップアップする取っ掛かりとしてはとても良い本なんじゃないでしょうか。

僕もこの本を読んだことで Python の知識を深めたい欲が増してきたので、次は積んでいる Fluent Python をちょっとづつ切り崩していきたいです。目指せ 玄人 Pythonista !

Fluent Python ―Pythonicな思考とコーディング手法

Fluent Python ―Pythonicな思考とコーディング手法

  • 作者:Luciano Ramalho
  • 発売日: 2017/10/07
  • メディア: 単行本(ソフトカバー)

*1:「いや機械学習Python 使ってますやん」という突っ込みは脇に置いておく

*2:僕は「見たことあるけどよくわかってないな」と感じる項目があったのでとても役に立ちました

*3:Twitter 等でアンケート取っても上位に来る気がします