Python内部。 イースターエッグ

こんにちは Habréには、パイソンのイースターエッグに関するかなりの数の記事がありましたが、これらすべてが内部からどのように配置されたかについては言及されていないようです。



主に初心者のパイニストにとって興味深いものになると思います。 これはカットの下で議論されます!



どのPythonイースターエッグが最初に頭に浮かびますか?



もちろん、Zen of Python(これをインポート)



Pythonソースフォルダーに移動するか、 githubを開きます。

そのソースは次のとおりです。



ロウズ
s = """Gur Mra bs Clguba, ol Gvz Crgref Ornhgvshy vf orggre guna htyl. Rkcyvpvg vf orggre guna vzcyvpvg. Fvzcyr vf orggre guna pbzcyrk. Pbzcyrk vf orggre guna pbzcyvpngrq. Syng vf orggre guna arfgrq. Fcnefr vf orggre guna qrafr. Ernqnovyvgl pbhagf. Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf. Nygubhtu cenpgvpnyvgl orngf chevgl. Reebef fubhyq arire cnff fvyragyl. Hayrff rkcyvpvgyl fvyraprq. Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff. Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu. Abj vf orggre guna arire. Nygubhtu arire vf bsgra orggre guna *evtug* abj. Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn. Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn. Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!""" 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]))
      
      







まあどう? ある種のperlのポリッジ...なぜコードでキャラクターを取得することに煩わされたのですか? 明確ではありません。



どうぞ githubで反重力を探しています。 これを見つけます:



画像



ご覧のとおり、モジュールはありません。



これはどういう意味ですか? 構成スクリプトを実行しようとするときです。おそらく、目的のファイルが生成されます。 Pythonソースフォルダーで./configureを実行します。



Libフォルダーを確認し、antigravity.pyを見つけます



その内容:



反重力
 import webbrowser import hashlib webbrowser.open("https://xkcd.com/353/") def geohash(latitude, longitude, datedow): '''Compute geohash() using the Munroe algorithm. >>> geohash(37.421542, -122.085589, b'2005-05-26-10458.68') 37.857713 -122.544543 ''' # https://xkcd.com/426/ h = hashlib.md5(datedow).hexdigest() p, q = [('%f' % float.fromhex('0.' + x)) for x in (h[:16], h[16:32])] print('%d%s %d%s' % (latitude, p[1:], longitude, q[1:]))
      
      





インポートすると、デフォルトのブラウザがどのように開き、その中のページが表示されます

Pythonコミックを使用します。



https://xkcd.com/353/



ところで、反重力では、ご覧のとおり、ジオハッシュ関数もあります。これは、ご想像のとおり、

緯度、経度、日付からハッシュを生成します。



他に何がありますか? そう、__ future__モジュール。 source / Pythonフォルダーに別のcファイルが割り当てられます。 __future__インポート機能から書いたときに誰も知らなかった場合

この機能はインポートしませんが、インタープリターに使用するように伝えます。 このため、この命令はファイルの先頭にある必要があります。 Cのモジュールコードで最も興味深い場所を以下に示します。それをもたらすことの全体的な意味はわかりません。



Cコード
 //    #define UNDEFINED_FUTURE_FEATURE "future feature %.100s is not defined" #define ERR_LATE_FUTURE \ "from __future__ imports must occur at the beginning of the file" //    static int future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) { int i; asdl_seq *names; assert(s->kind == ImportFrom_kind); names = s->v.ImportFrom.names; for (i = 0; i < asdl_seq_LEN(names); i++) { alias_ty name = (alias_ty)asdl_seq_GET(names, i); const char *feature = PyUnicode_AsUTF8(name->name); if (!feature) return 0; //   ,   if (strcmp(feature, FUTURE_NESTED_SCOPES) == 0) { continue; } else if (strcmp(feature, FUTURE_GENERATORS) == 0) { continue; //  ,    } //             //    } else if (strcmp(feature, FUTURE_BARRY_AS_BDFL) == 0) { ff->ff_features |= CO_FUTURE_BARRY_AS_BDFL; } else if (strcmp(feature, FUTURE_GENERATOR_STOP) == 0) { continue; } else if (strcmp(feature, FUTURE_ANNOTATIONS) == 0) { ff->ff_features |= CO_FUTURE_ANNOTATIONS; } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); //    ,     PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1); return 0; } else { PyErr_Format(PyExc_SyntaxError, UNDEFINED_FUTURE_FEATURE, feature); //-  ,   PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1); return 0; } } return 1; } //     if (s->kind == ImportFrom_kind) { identifier modname = s->v.ImportFrom.module; if (modname && _PyUnicode_EqualToASCIIString(modname, "__future__")) { //   if (done) { PyErr_SetString(PyExc_SyntaxError, ERR_LATE_FUTURE); //           PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } if (!future_check_features(ff, s, filename)) return 0; ff->ff_lineno = s->lineno; } else { done = 1; } } else { done = 1; } } return 1; }
      
      







まあ、それがすべてのようです:-)



しかし、Pythonについてのミームの終わりに、それはポジティブです!







PS:真珠のコード作成者の誰も気分を害したことはないことを願っています。たくさんのクールなものが書かれています。



All Articles