秋のブログ週間2023、3週目・13本目です。
Python Distilledという本がオライリーから出版されました。作者のDave Beazleyはかなり昔からPythonを使い込んでいる人ですので、この本には信頼しかない、と思い読んでみました。Daveは大学の教授をしていて、コンピュータサイエンスで表彰もされている筋金入りです。本家PyConでも何度も発表されているようです。Python歴は27年でOSSとしてはC/C++をラップして他の言語で使えるようにコードを生成するSWIGはすでに20年以上の歴史がありますし、パーサージェネレータのPLYとSLY。curioというコルーチンのライブラリなどを作っています。僕は以前、SWIGのドキュメント翻訳をしてCマガジンに特集記事を書かせていただいたこともあり、僕の大学時代の顔写真がSWIGのウェブサイトに公開されていたりします。
そういう世の中のほぼすべてのPython本の著者よりも長いPython歴を持つ著者で、大学やそれ以外の場でPythonを20年以上教え続けているということを考えると、この本の重みがつたわってくるかと思います。
誰におすすめな本なのか?
さっと読んでみたところ、本当にプログラミング言語を学ぶのが初めてで、1つ目の言語としてPythonを覚悟を持って学ぶ人(学問の基礎として)、あるいは長らくPythonを書いてきて、現代のPythonの知識にリフレッシュしたい人に最適な気がしました。また、他の言語を大学の授業のような場で学んだ人がPythonを学ぶのにも良いと思います。
趣味でプログラミングを触ってみたいが、すぐにWebサービスを作ったり動くものにフォーカスしたい人とかとりあえずちょっと触ってみたい人には教科書然としたところがちょっとあたりが強めに感じるかもしれませんが、僕は逆に大学の授業のプログラミングを思い出しては懐かしい気持ちを覚えたりもしました。
現在サポートがまだ行われている最低限のバージョンがこの本のターゲットとほぼ同じため、ここに書いてあることはすべて「今使えるPythonの文法」を完全に内包しています。
僕が翻訳したエキスパートPythonプログラミング改訂4版などは、テストの仕方や実践向けのパフォーマンスチューニング、大規模開発に向けたアーキテクチャの話なども入っています。この本はそのようにPythonでお金を稼ぐための本というよりは、Pythonの知識をがつっとインストールする人向けの本という趣です。まさに教科書という感じです。
PyCon APAC 2023の基調講演でも紹介のあった京都大学/東京大学のPython講座の教科書と比べると、こちらの方はよりPythonの原則である特殊メソッドによるカスタマイズ、非同期I/Oなど、Pythonの言語コアへの説明が手厚いと感じます。一方で、京都大学・東京大学の方は、おおむね60%ぐらいはオーバーラップしているものの、AI教育を見据えてそちらのライブラリの使い方を学ぶ、それを扱うための文法にフォーカスしている気がします。こちらはITが専門の学科じゃない人も学ぶための本ということだったので、そちらを読んだ人がもう少し言語力を鍛えるのにも良い気がします。
どのような知識のリフレッシュがあるのか?
言語知識って単にカタログ的に追加していけばいいというわけではなく、周辺機能とのトレードオフが発生したりもします。例えば、本書で説明されている内容で「なるほど」と思ったのが、ジェネレータの用途です。これはループ構文という多くのPython開発者が慣れているインタフェースを通じて高度な処理を書くための文法だったりもしますが、「async/awaitが入ったことで、ジェネレータが過去に必要とされた用途の一部はasync/awaitの方がよくなったよ」というものがありました。
このように、新しい文法要素が入った結果の現在の適切な書き方などは、単にバージョンの差分を追いかけていくだけでは身につきにくいと言えます。あとは、yieldの返り値を使うとループ構文としては使えないよとか、ジェネレータはエンドユーザーからは隠されるライブラリの内部実装として使われるケースも多くなってきているよ(コンテキストマネージャの実装I/Fとして)とかは、確かに言われてみるとそうだな、と思わされるなどしました。
あとは、僕自身もそうですが、以前からPythonを書いていて、Python歴が長くなった人には、こういう頭の整理や知識のリフレッシュができるという本書の使い方も有用だと思います。最初の方のファイルオープンのコーディングも、コンテキストマネージャを使い、セイウチ演算子も使ったサンプルがさっとでてきたりします。どちらも僕がPythonを学んだときにはなくて、コンテキストマネージャぐらいは使うものの、セイウチ演算子を使ったファイル読み込みのイディオムはこうなっているのか、というところは新鮮に感じました。
それ以外にも僕が知らなかった(追いかけきれてなかった)ものでメモしたのは以下のものとかですね。
- 例外の連鎖(
raise ApplicationError() from e
)と__cause__
属性 lambda
のデフォルト引数で変数を先行束縛async with
yield from
from module import *
は名前空間のトップでしか使えないpkgutil.get_data()
bytearray
データクラス周りは少し言及があってもいいのにな、とちょっと思いました。
まとめ
着実にPythonを自らの血肉にしていきたい人向けの本です。特殊メソッドが列挙されてたり、組み込み関数を全部紹介とかちょっとストイックだな、と思う部分もあるものの、Pythonの地力を上げるにはおそらくいつかはやることになるものだと思うので、こういうのを若いうちにしっかりやっておくというのはすごく良いと思います。
次は佐藤さんの 次世代型データベース 劔”Tsurugi” とは何?公式サイトから調べてみた!です。