akiyoko blog

akiyoko の IT技術系ブログです

「スマートPythonプログラミング: Pythonのより良い書き方を学ぶ」を読んだ

Amazonプライム会員の特典で月一冊無料で読めるプライム対象本(正確には「Kindleオーナー ライブラリー」の対象本)を眺めていたら、新しい Python 本が見つかったので、早速読んでみました。

著者が想定する読者像は「不安を覚えながらなんとなく動くように Python を書いている人」と書いていますが、全部読んでみた感じでは私は、まず初学者向け Python 本をざっと読み終えた後、何ヶ月か(あるいは一年ほど)Python のコードを実務で書いた上で、「脱初心者」を目指そうとしている Python プログラマを対象としているのかなと思いました。

ということで、初学者向けには少し難しいけど、少し Python をかじった人には知りたいような内容が詰まっています。


例えば、「内包表記(リスト内包・集合内包・辞書内包)」や「ジェネレータ式」、「デコレータ」「コンテキストマネージャ」などは、分かりやすくまとまった記事を見つけるのが難しいように思います。そういった意味でも、なかなか貴重な学習本ではないかと思います。特に、デコレータは、脱初心者が抑えておきたい重要な要素だと個人的に思ってます。

ジェネレータは、あまり頻繁に出てくるものではありませんが、たまに出てくると「あれ?」と考えてしまったりします。ジェネレータは、yield 文で値が返されたときの状態を保持していて、次に呼び出されたときに前回の yield 文の直後から再開されるという、説明だけ聞くとややこしい概念なのですが、この本の説明で「なるほど」と思ったのは、「ジェネレータを呼び出すと、それで得られるのはイテレータオブジェクト」ということで、以下のようなサンプルコード(少し手を入れました)を例示しています。

test.py

#!/user/bin/env python
# -*- coding: utf-8 -*-


def test():
    yield 1
    yield 2
    yield 3


def main():
    it = test()
    for i in it:
        print(i)


if __name__ == '__main__':
    main()

Python 2.7 で実行

$ python test.py
1
2
3


またこの本は、全体的にすごく丁寧に説明されているな、と感じます。
例えば、序章の中で、「Hello, World!」を書くサンプルコードを出していますが、「なぜそう書くのか」を丁寧にひとつずつ解き明かして説明しています。
この部分と第二章の「開発環境を整えよう」は、初学者にも有益で分かりやすい説明になっていると思います。

しかしながら後半、特に、Python のバージョン 2.x 系と 3.x 系を共存させるための書き方などは、初学者や初級者には(頭の片隅には入れておいてもいいですが)めったに出会うこともがないため、最後まで読み切る必要はないと思います。


ともあれ、初学者が、「やさしいPython入門」や「Pythonスタートブック」などの薄めの本を読んだ後の二冊目の教科書として読むのは少し厳しい感じがするので、厚めの本を読んでからこの本を読むのがいいかもしれません。


私の場合は、初めてのときに

を読んだ後、次に、

を部分的に読んで、

を最近読みました。

最後の一冊は Python の言語としての使い方の説明は少ないので、Python 自体の学習という趣旨から外れるかもしれませんね。