Personal tools

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さん。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/python-easter-egg/tbping

Re: Pythonのイースターエッグ

Posted by Dubhead at 2008-03-04 11:56
Zen of Pythonってrot13されてたんですね。知らなかったw

Re:Pythonのイースターエッグ

Posted by jbking at 2008-03-04 16:46
"not a chance"は受けましたw

Re:Pythonのイースターエッグ

Posted by ats at 2008-03-05 10:09
>Dubheadさん
ソースコードを読まれること前提になってるみたいですね(w

>jbkingさん
ごの機能(?)自体は,追加されたときから知ってたんですが,Cのソースに定義されているというのは今回初めて知って,ちょっと感動しました(w
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
コメントスパム避けのための認証文字列です

Captcha Image

Pythonな求人
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author


atsこと柴田淳です。Atsushiはガイジンにうまく発音して頂けないので,これからはJunというペンネームで行こうと思っていましたがあんまり使ってません。
Webcore株式会社 代表取締役
■TRIVIAL TECHNOLOGIES 2.0
トリビアル・テクノロジー 2.0,「トリテク 2.0」と呼んでください。
Blog(ブログ)サイトです。Plone上で動く,オープンソースのBlog Product - COREBlog2を使っています。
 
最近書いた本,Mook
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
みんなのPython
Pythonの入門書です。基本的なことから分かりやすく解説するよう勤めました。Pythonをはじめたいと思っている人,JavaやC++,PerlやRubyを学ぼうと思って躓いてしまった人はぜひ読んで下さい。
 

Powered by Plone, the Open Source Content Management System