このサイトについて

Pythonのイースターエッグ

Pythonのイースターエッグ

イースターエッグとは,コンピュータやソフトに隠されたメッセージのこと。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さん。

2010-08-27 04:46