理系学生日記

おまえはいつまで学生気分なのか

はじめての Python、パーフェクト Python

諸々のところで Python を読み書きする必要が生じてきているので、Python 入門した。
ISBN:978-4873113937:detail

はじめての Python、タイトルどおり Python はじめての人向けに書かれていると思うんだけど、808 ページとかあって、Python はじめての人の大半は挫折するとおもう。一日で読もうとか最初思ってたんだけど、読んで挫折して寝て読んで挫折して寝るっていうかんじだった。studyplus に記録したログ見てたら、読むのに 6 日くらいかかってた。それでも、amazon の履歴見たら 2010/12/20 に買ってたから、3 年積読してたことになる。よくよくかんがえてみると 3 年積読してたものを 6 日で読んだってことだから、なんかスゴい、がんばりましたっていう印象になった。


Python 自体は綺麗な言語だとおもう。あと、The Zen of Python の記載があるからかもしれないけど、こういうときにはこういうやり方が良いよっていうコンセンサスが取れてるイメージがある。

There should be one-- and preferably only one --obvious way to do it.

PEP 20 -- The Zen of Python | Python.org

実際にそういう文化を感じたのが reduce を使ったプログラム書こうとしたときだった。
はじめての Python には、各章に練習問題あって、ちょっとサンプルプログラムつくろうと思って reduce 使おうとしたけど、'reduce' is not defined って言われた。Python 2 では組み込み関数だったけど、Python の言語作者の Guido van Rossum が reduce 分かりづらいって吠えてて、Python 3 系からは組み込み関数じゃなくなったみたい。Guido van Rossum が reduce 使うの分かりづらいって言ってるし、よくよく考えると、たしかに reduce 使ってるプログラムは分かりづらいの多いから、素直に従おうって思った。TMTOWTDI とは対極にあるかんじもするけど、文化の違いだとおもう。こういう思想みたいなのが言語作者から発信されるの、新鮮なかんじがする。

So now reduce(). This is actually the one I've always hated most, because, apart from a few examples involving + or *, almost every time I see a reduce() call with a non-trivial function argument, I need to grab pen and paper to diagram what's actually being fed into that function before I understand what the reduce() is supposed to do.

The fate of reduce() in Python 3000


で、読むのたいへんだったけど、とりあえずはじめての Python 読みおわった。深さがないかんじだったら、次にパーフェクト Python 読んでみた。こっちはもうすこし実践的な内容。
ISBN:978-4774155395:detail
イテレータに代表されるプロトコルとか、デコレータとか、こういうシンタックスシュガーとも言えるものが言語レベルでサポートされてると、おしゃれ感強いし、やる気がでる。よっぽど黒魔術使わないかぎりは、読みやすさも向上するし、繰り返しになるけどやっぱしおしゃれな感じがあって良かった。

ただ、Python 2 と 3 で、それなりにちがいがあって、Python 2 を使うときはこういう書き方をして、3 をつかうときはこういう書き方をしないといけない、みたいなのはつらみがある。print だけを見ても、Python 2 では Statement だったのが Python 3 では組み込み関数になってて、ここでいきなり躓くかんじになってる。Python 2 で書いた Hello, World が Python 3 では動きません!!!! みたいな悲劇よくあると思う。
こういう互換性問題とかもやっぱり言語の持つ文化っぽい。Python の文化にもうちょっとちゃんと漬かって、慣れていきたい。