著者より献本御礼。
日本で Python がいまいち普及していない理由は、こういう本がなかったからかも知れない。カジュアルでフルーガルな、いままでありそうでなかった一冊。
本書「Pythonポケットリファレンス」は、「実践Python」の著者の一人が、「習うより慣れろ」のスタンスで書いたPython本。
目次 - 書籍案内:Python ポケットリファレンス|gihyo.jp … 技術評論社本書の美点は、なんといってもその小ささ。動物本の半分の四六版で、400ページ弱というのは、体積にして「初めてのPython 第3版」の1/4。Lightweight Language には Lightweight な本がよく似合う。この点で Python は特にひどかったので、この点だけでも本書を勧める。税込み 2,604 円と財布にやさしいのもよい。
説教くさくないのもよい。Pyhton本がなぜあれだけクソ分厚いかといえば、なんといっても説教の多さだろう。
404 Blog Not Found:もはや入門書というよりバイブル - 書評 - 初めてのPython 第3版一つは、著者--に限らず Pythonistas というのは、「どうやる」、「なぜそうか」に加えて「なぜそれが正しいのか」を語りたがる癖があるから。小姑といえば小姑ではあるが、懇切丁寧といえば懇切丁寧である。Pythonたんが実在したとしたら、委員長に違いない。ぜったい違いない。
それで「Pythonもういいです」となった人も結構いるのではないか。
とはいえ、一言言わないと気が済まないのが Pythonista という人種なのか、本書にも説教がなくはない。で、私が一番引っかかったのも、そこ。
P. 39def even(xs): return [x for x in xs if x % 2 == 0] xs = range(1, 10) print even(xs)
def even(xs) return xs.select{|x| x % 2 == 0 } end xs = 1..9 p even(xs);
sub even{ my @xs = @_; my @a; for my $x (@xs){ push(@a, $x) if $x % 2 == 0; } return @a; } @xs = (1..9); @a = even(@xs); print "@a\n";
これはさすがにちょっとひどい。著者が Perl に不案内ということもあるのだろうが、Pythonでリスト内包表記を使っていて、RubyでArray#selectを使っているのであれば、Perlでそれに相当するのはgrepだろう。
sub even{ grep { $_ % 2 == 0 } @_; } print even(1..9), "\n";
このサンプルを使っても、Perlへの批判はなお成り立つ。いやより成り立つ。$_
と@_
という、格好の対象があるのだから。
私ははっきり言って Python の哲学は好きになれない。でも Python のコードは好き。「動く pseudocode 」としてのチャンピオンは、今や Python だ。Python はもっと知られ、もっと使われて良い。 Pythonistas のみならず、 Perl Mongers のためにも、 Rubyists のためにも。
Dan the Polyglot
追記:というわけで、Pythonistasに質問。ワンライナーはどうしているのでしょうか。まさか/usr/bin/python
をログインシェルにしているとか....
PythonにはLightweightな定番書があるんだよ。