Python stdlib reading - antigravity
StackOverflowなどを読んでいて、Pythonの良質サンプルコードの話になると大抵挙がるのがstandard libraryである。*1
Pythonの哲学の一つにBatteries Includedというものがあり、基本的にPython自体のインストールについてくる豊富なstandard libraryで相当のことができてしまう。*2
その多くがPythonで書かれたものであり、そのソースを読むことはPythonのCore Developer陣の書く、よりPythonicである可能性の高いコードに触れるいいチャンスである、というわけだ。*3
というわけで、今までは大抵ドキュメントしか開いてこなかったが、今後はソースもちゃんと読んでみよう、というわけで第一回。頭のaから適当に簡単そうなのから選んでいこうと思ったら、まさにはじめるにあたって一番簡単そうなモジュールが。その名もantigravity。
このモジュールについて語る前に、まず一つのウェブコミックについて語らねばなるまい。
海外のギーク系だったら大概知っているだろうウェブコミックのxkcd。科学系の話題やグラフ・チャートを用いて、笑いの中にはっとさせる慧眼が見え隠れするというなかなか素晴らしいサイトである。どうやったらxkcdちっくなゆるーいグラフをmatplotlibで表示できるかというipython notebookが公開されるくらいにはカルトなファンがいたり、作者がグーグルのマウンテンビューで講演をしたビデオがネットに載っていたり*4と、二十一世紀ギークカルチャーの一部となっている。
そのxkcdのひとつのコミックがこれ:
日付は2007-12-5となっている。*5「空も飛ぶことだってこんなに簡単だ。そう、Pythonならね」*6とのこと。まあオチは「それとも、僕が今シャブやってるからかな?」なのだが。
ともかく、import antigravityで空も飛べるというネタはかなりおいしいので、Pythonのイースターエッグとして(もとはGoogle App Engine用に)2008年ごろに取り入れられた。*7Pythonのインタラクティブ・シェルよりimport antigravityと入力すると上記のxkcdのページがウェブブラウザで開く、というもの。非常に単純である。
そしてそのソースコードも異様に単純。たった二行。
import webbrowser
webbrowser.open("http://xkcd.com/353/")
これだけである。*8
webbrowserって初めて見た。なにこれ便利そう、と思ったのもつかの間、なぜかWindows 8のIE11だとopenもopen_newもopen_new_tabもすべて既存のウィンドウで新しいタブを作るのみである。openとopen_new_tabはまだしも、open_newなら新しくウィンドウを作ってくれるかと思ったのだが・・・ あと、古いモジュールらしく、指定できる(非デフォルト)ブラウザにChromeがない。IEもないのはご愛嬌か。
まあ、それはともかく、少なくともウェブブラウザの新しいタブで特定のページを開かせるのに二行、うちインポート文が一つ、というのはそれなりに使えそうな気がしないでもない。引数をとるスクリプトでチャカチャカやれそうである。
次はもうちょっと長めのモジュールをみてみよう。何がいいかな。
*1:DjangoやTwistedといった超有名ライブラリも挙がるが
*2:numpyやmatplotlib, ipythonなど個人的には絶対にインストールしたい3rd party packageもあるが・・・
*3:まあ有名な反例としてはcollectionsというモジュールの中のnamedtupleが最適化のためにpython code stringを作ってevalしているというあまりPythonicではないコードも中にはあるが・・・。Practicality beats purityということか
*4:しかもイントロがPeter Norvig!
*5:Archiveよりリンクにホバーで表示される
*6:どちらかというと「そう、iPythonならね」としたほうが座りがいい気がするが仕方がない
*7:GuidoのHistory of Pythonブログ参照
*8:メインのマシンではいまだにPython2.7。別のPCでは3.4を入れてあるのだが・・・