Python プログラミングを学ぶための準備運動 - 翔泳社『スラスラわかる Python』

このたび、縁あって『岩崎圭、北川慎治 著書、寺田学 監修 (2017). スラスラわかる Python, 翔泳社』(以下、本書) を恵贈賜りました。

著者並びに出版社の皆様にお礼とご慰労をかねまして、僭越ながら本エントリにて一読後のレビューを兼ねたブログを投稿いたします。

スラスラわかるPython

スラスラわかるPython

総評

本書は、これからプログラミングや Python を学ぶための 準備運動 として最適な一冊に仕上がっています。

初学者が Python を学び進めるにあたり、本書には次の良い点があるでしょう。

  1. ボリュームが適度
  2. Python 文法の中で重要な点が抽出されている
  3. 図説、コード、解説のバランスが良い

「1.」および「2.」について、本書が構成されるにあたり、多くの取捨選択がなされています。例えば本書では「リスト型」の説明をするにあたり Python の特長の 1つでもある「リスト内包表記」の説明はなされません。リスト型や辞書型の説明はありますが集合型の説明は省略されています。当然のようにクラスの解説も登場しません。

まず Python を知ってもらう、プログラミングが動く楽しさを体験する という観点でこの取捨選択は妥当と言えます。反面、網羅性は犠牲になっていますので、Python の基礎レベルに到達するためには最低でも別のもう1冊の書籍から学びを得る必要があります。その意味で、準備運動のつもりで本書に取り組む姿勢が望まれます。

本書を通読したということは、充分に体がほぐれたことを意味します。

その自信をつけたうえで別の−−網羅性の高いものが望ましい−−入門本を手に取り、プログラミング学習という長い道のりを走り出すのがよいでしょう。

雑感: 例外処理と型について

例外処理について改めて感じたことですが「Python の例外の仕様がわかる」と「Python で適切な例外処理が記述できる」という両者には隔絶の差があります*1。比較的平易であるとされる Python の言語仕様において例外が例外なのか (※ 駄洒落ではない) 例外処理そのものが難しいのか……。

本書でもこのことは考慮されており、入力チェックについて例外処理を濫用せずに if 文でチェックを実施する方法が参考情報として解説されています。

# 114ページのコードを一部変更したもの

def add_10(num):
    if not isinstance(num, int):
        print('Invalid num')
    
        return False

    add_num = num + 10
    print('add_num is {}'.format(add_num))

    return add_num

Python としては普通の感じですが (Early Return していて好き) 、型があればよりシンプルにな制御で済むし、False または int が戻る関数というのも少し収まりが良くありません*2。これはコード例が悪いということではなく例外処理難しいですねと思ったということです。

おそらく説明平易性を維持するために Type Hints*3 には触れられていないのだと推察しますが、こうも書けるでしょうか。

def add_10(num: int) -> int:
    add_num = num + 10
    print(f'add_num is {add_num}')

    return add_num

ただ Type Hints を付けたからといって データ型にまつわる例外処理や条件分岐を無条件で省略可能になるわけではないです。

型論争みたいなところに首を突っ込むと Python だけに藪蛇 (※ 注釈略) になりそうなので深い言及は避けたいですが、適度な制約は学習曲線向上の手助けになると感じています。つまり Python を初学者に教えるにあたり Type Hints は積極的に推していくのがよいと思っています。ただしこの考えはおそらく本流ではないです。

雑感でした。

*1:これはどんなものもそうだと思いますが、例外処理が特に、という意味です

*2:Go に慣れた今では特に。error を常に返したいと思ってしまう

*3:typing — Support for type hints https://docs.python.org/3/library/typing.html