2009年5月5日火曜日

みんなのPython 改訂版

 私は、趣味ではプログラムは書かないのですが、仕事では書くことがあって、けれど自分はプログラマですといえるほどのものは書きません。じゃあどんなプログラムを書くのかといえば、Excelに通してしまったために値が変更されてしまったCSVを手当てするプログラムであるとか、CSVファイルを読んでログインIDとパスワードをメールで通知するプログラムであるとか、そういったものを書くんですね。ちょこっと、隙間みたいな時間で書けて、うまく作ってやると、あとあとも便利に使えそうな、つまりは繰り返しやることがわかってる作業を楽にする目的で、あるいは人の目だと見逃しをやらかしてしまいそうな、けれどやること自体は単純な(いいかえればつまらないが量だけはしこたまある)作業を確実にやっつけたいときとかに、プログラムは役立ちます。

さて、プログラムとひとくちにいいましても、言語が違えば作法も変わってきます。そのため、自分にあった言語を選ぶのが大切です。また、作法が自分にあっているというだけでなく、自分の使っているプラットフォームに対応しているかどうかも重要です。例えばWindowsしか使わないという人だったらなでしこあたりが最適と思われますが、残念ながら私は自宅ではMacintoshを使っているため、なでしこはあきらめざるを得ませんでした。

職場ではWindowsを使い、自宅ではMacintoshを使う、そんな私にマッチした言語はPythonでした。Pythonの特徴は、プログラムのブロックを表現するのに、タブ(インデント、スペース4つが推奨)を用いることとよくいわれます。Perlなんかでは波括弧({})を使いますが、Pythonはインデントの深さでブロックを表現するから、誰が書いたプログラムであっても、そこがブロックであるとわかる。こんな具合に、言語自体が持っている規約がプログラムを読み易くするのに貢献するから、人の書いたプログラムであっても、また自分が昔書いたプログラムであっても、スムーズに読んでいくことが可能です。まあこのあたりは、Python Japan User's GroupのPythonの紹介あたりを読んでいただくとして、あるいは今日紹介しようとしている本、『みんなのPython』の著者である柴田淳氏のBlogPythonがプログラミングの学習に向いているたった一つの理由を読んでいただくとして、それで面白そうだなと思ったら『みんなのPython』買っていただくとして、いや、本当にPythonはお勧めです。もちろんなでしこでもいいんですけど。

私がPythonを愛用しているのは、エリック・レイモンドがすすめていたから、ということもあったのですが、他にもいろいろ理由があって、まずは先程のインデント、こうした言語の仕様から適切なプログラミングの作法を学ぶことができるのではないかという期待があって、そしてweb上に公開されているまとまった和訳ドキュメントの存在です。体系的なリファレンスがあるというのは、プログラミング言語に限らず、なにを学ぶにしても重要なことで、自分の手にしている情報が新しいかどうか、信頼できるものであるかどうか、それがはっきりしているだけで学習の効率はあがります。この点、Javaなんかも素晴しい。リファレンスに加えて、Eclipse IDEあたりを使うと、Javaの作法についてもがんがんつっこみ入れてくれて、すごく勉強になります。って、どんどん話がそれていくな。

Pythonはドキュメントが充実しています。Pythonでわからないこと、調べたいことがあったら、まず標準ドキュメントを読みにいくというのがならいになっています。もう何度アクセスしたかわからない、それくらいであるのですが、しかしこれらをしっかり全部通して読んだこともまたないのですね。いやあ、あれは辞書みたいなものだと思ってまして、わからないことが出るまでは読まない。そんな横着をしているせいで、時にまわり道をするようなこともあって、例えばそれはこんな具合です。

Excelで開いたため値が変更されたCSVが持ち込まれたときの話です。0埋めで桁がそろえられているデータの0が全部とんでしまった。それに対し私は、0埋めをする関数を書きまして、それはこんな具合。

def touch_len(s, digit=6):
if not isinstance(digit, int):
raise TypeError('need int as digit, got %r' % ¥
type(digit))
while len(s) < digit:
s = '0' + s
return s

文字列を渡すと、0を追加して指定の長さ(デフォルトで6桁)にして返してくれる関数です。けど、同様のことをしてくれる関数(正確にはメソッド)はPythonが標準で用意していて、つまり私は書かないですむ関数を書いたってわけなんですね。今回の関数は短いものだったからいいけど、これがもっと長くて複雑でややこしくて面倒なものだったら、どうでしょう。すごい回り道です。やらなくてもいい苦労です。私は面倒は大嫌い、しないといけない苦労も避けたい、そんなタイプです。だから、苦労、面倒を避けるためにも、ちゃんと言語の仕様は知っておいた方がいいなあ。そう思ったのでした。

『みんなのPython』を買ったのは、ちゃんとPythonを知りたいと思ったからでした。けれど、この旧版を買わなかったのは、その存在を知った時点ですでにちょっと内容が古びはじめていたからでした。だから、今回の改訂はすごくありがたかったです。発行はつい先月の11日。扱われるバージョンは、現在主流である2系の最新版である2.6です。私は常に最新版をと思っているので、ちょっとしたプログラムを書くさいには3.0.1を使っていますが、CGIには2.6.2を使っているから、まだまだ有用です。出ていると知った翌日にはもう買っていました。それでちびちび読んでいる最中です。知らなかったこと、知りたかったことがいっぱい書かれています。それも、わかりやすく、親切に、丁寧に書かれていて、プログラムなんてしたことない、っていう人にもきっとわかる、そんな丁寧さはちょっとまどろっこしいと思わないでもないのだけど、いずれその丁寧さに感謝する日がくるはず。ちゃんと理解できてないようなトピックにぶつかった時に、まどろっこしいなんて思ってごめんなさいと謝るのですね。

けど、プログラミング言語なんてすすめられても、日常に使うようなことってあるか? そういわれると、人によるかな、というしかないでしょうね。例えばですね、このBlogから四コマ漫画に関係しそうなページを抽出してリストを作るとかね、あるいは自分のサイトのリンク集にデッドリンクがないかチェックするとかね、あるいは更新履歴を残さない、過去ページも残さない、そんな漫画家のサイトを定期的にチェックして、更新されていたら内容をダウンロードするとかね、応用しようはいくらでもあろうかと思います。私はどれもやってませんが。コンピュータに関することで、こんな風にやりたいんだけど、いいソフトがないんだな、と思うようなことってあるかと思います。それがあんまりに高度なことだとお手上げでしょうけど、ちょっとしたことなら、こうしたプログラミング言語を使うことで解決できたり、作業、手順を簡略化できたりするっていうことは結構あるものです。そうしたときに、Pythonが力になってくれるかも知れませんよ。

0 件のコメント: