イースターエッグとは,コンピュータやソフトに隠されたメッセージのこと。Pythonにもいくつか隠しメッセージが潜んでいます。
thisモジュールをインポートすると,the Zen of Python と呼ばれるありがたい英文が表示されます。
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex. (以下略...)
Python内蔵の標準モジュールには,実際にthis.pyというモジュールがあります。ソースコードがけっこうおもしろい。まず暗号化された文字列が定義されていて
s = """Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
それをわざわざ復号化して表示しています。凝ってるな。
d = {}
for c in (65, 97):
for i in range(26):
d[chr(i+c)] = chr((i+13) % 26 + c)
print "".join([d.get(c, c) for c in s])
もうひとつのイースターエッグ。将来搭載予定の機能を使うための__future__ディレクティブを使ったイースターエッグ。CやJava,Haskellなどでは,braces(ブレース,波括弧{〜})を使ってブロックを表現します(できます)が,未来(__future__)からbracesをimportしようとすると,
>>> from __future__ import braces
File "<stdin>", line 1
SyntaxError: not a chance
「ねえよ!」という答えが返ってくる。
__future__.pyというモジュールが実際にあって,ここでこの構文を処理しているようなんだけど,bracesというモジュールは見あたりません。どうやってこんなイースターエッグを表示しているのかと調べていたら,ありました。Cのソースコード,Python/future.cに埋め込まれていた。
} else if (strcmp(feature, "braces") == 0) {
PyErr_SetString(PyExc_SyntaxError,
"not a chance");
PyErr_SyntaxLocation(filename, s->lineno);
return 0;
} else {
そこまでして否定するなんて,ブレースがそうとう嫌いなのね>Guidoさん。