Fluent PythonはPython中級者にお勧めの名著


このエントリーをはてなブックマークに追加

少し前のことですが、一年以上かかってのろのろ読んでいたFluent Python - O'Reilly Mediaをようやく読み終わりました。792ページもの厚さにもかかわらず密度が非常に濃く、どのページにも発見がある名著だと思います。オライリー公式での高評価も頷けます(今はなぜかレビューページがなくなっているようですが)。

本の特徴

本が執筆された当時のPython 3.4を対象に執筆されていますが、asyncioなど一部Python 3.5相当の機能についての言及もあります。また、Python 2.7との比較も要所でなされています。

この本の特徴は、Pythonicな書き方とは何か、なぜPythonの言語仕様がこう決められたのか、という疑問を、数多くの資料を援用して解き明かしていることだと思います。資料には、書籍のみならず、PEPsや、Stack Overflow、PyConのチュートリアル資料などのWeb上のリソースが数多く含まれます。いかにPythonが多くの議論のもと進化してきたかがよく分かるとともに、著者の博識さにも驚かされます。リンクが多いので電子書籍のほうが紙より楽かもしれません。

また、著者であるLuciano RamalhoはPythonの講師の経験も豊富とのことで、説明もわかりやすいと感じました。非ネイティブには辛い難解な言い回しやユーモアなどもなく、素直で読みやすい英語だと思います。

誰向けの本か

初心者向けの本ではなく、仕事や趣味ですでにある程度Pythonを使っている人向けです。Pythonicなコードとは何かを知りたい人におすすめできます。

勉強になった箇所

どの章も濃密ですが、以下は、特にこの本でしか読めない情報があると私が感じた箇所です。

ユニコード関係

第4章 “Text versus Bytes"は、ユニコードを中心としたテキスト処理に関する話題がよくまとまっていて、Pythonを使う人でなくても読んでは損はない内容だと思います。

自然言語処理系の人なら、テキストの前処理に使える情報を見つけられるかもしれません。例えばunicode.normalize('NFKC', ½)と呼ぶことで½1/2に置換できることなどが紹介されています。

並行処理関係

第17章 “Concurrency with Futures”, 第18章 “Concurrency with asyncio"と、かなりの部分が並行処理の説明に割かれています。特にasyncioはあまり解説がWebにないような気がするので、貴重な情報源だと思います。ただ、告白すると、このあたりはあまり消化できていない箇所です。