Python internal. Telur paskah

Hai Di Habré ada beberapa artikel tentang telur Paskah ular sanca, tetapi tampaknya tidak disebutkan bagaimana semua ini diatur dari dalam.

Saya pikir itu akan menarik terutama untuk pythonists pemula. Ini akan dibahas di bawah cut!

Telur paskah python mana yang terlintas dalam pikiran pertama?

Tentu saja Zen Python (impor ini)

Buka folder sumber Python atau buka github .
Ini sumbernya:

BAKU
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])) 


Bagaimana? Semacam bubur perl ... Mengapa Anda harus repot-repot mendapatkan karakter dengan kode? Tidak jelas.

Silakan. Kami mencari antigravitasi di github. Kami menemukan ini:

gambar

Seperti yang Anda lihat, tidak ada modul.

Apa artinya ini? Sudah saatnya mencoba menjalankan skrip konfigurasi, mungkin ini akan menghasilkan file yang diinginkan. Jalankan ./configure dalam folder sumber Python.

Kami memeriksa folder Lib dan menemukan antigravity.py di sana

Isinya:

antigravitasi
 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:])) 

Saat mengimpor, kita melihat bagaimana browser default kita terbuka dan halaman di dalamnya
dengan komik python.

https://xkcd.com/353/

Ngomong-ngomong, dalam antigravitasi, seperti yang Anda lihat, ada juga fungsi geohash, yang, seperti yang Anda duga,
Menghasilkan hash dari lintang, bujur dan tanggal.

Apa lagi yang kita miliki? Modul __future__ benar. File c terpisah dialokasikan untuknya di folder source / Python. Jika ada yang tidak tahu kapan Anda menulis dari fitur impor __future__
Anda tidak mengimpor fitur ini, tetapi beri tahu penerjemah untuk menggunakannya. Untuk alasan ini, instruksi ini harus di awal file. Berikut adalah tempat paling menarik dalam kode modul dalam C;

Kode 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; } 


Yah, sepertinya hanya itu saja :-)

Tetapi pada akhir meme tentang python, itu positif!



PS: Saya harap tidak ada coders pada mutiara tersinggung, banyak hal keren yang tertulis di sana.

Source: https://habr.com/ru/post/id430308/


All Articles