日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python import 原理-Python之禅-import this的实现

發(fā)布時(shí)間:2025/3/20 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python import 原理-Python之禅-import this的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)過Python的人想必都聽過大名鼎鼎的Python之禪:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren"t special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you"re Dutch.

Now is better than never.

Although never is often better than right now.

If the implementation is hard to explain, it"s a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let"s do more of those!

當(dāng)你在Python解釋器中敲入"import this"的時(shí)候它就會出現(xiàn),那么它是怎么實(shí)現(xiàn)的呢?或許你和我的想法一樣:定義一個(gè)字符串zen_of_python,把上面的字符串傳給它,然后print就行了。這確實(shí)是非常簡單的實(shí)現(xiàn)方式,但是當(dāng)我打開Python的源碼文件時(shí)驚訝的發(fā)現(xiàn)其實(shí)它并不是這樣實(shí)現(xiàn)的。

從Python源碼包的Include目錄下的this.py我們可以看到它的實(shí)現(xiàn)是這樣的:

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

代碼前部的字符串像是一堆亂碼,但是從格式上看和Python之禪是一樣的。要理解Python之禪是怎樣被輸出的還是要看下面的代碼。

我們首先看兩個(gè)嵌套的for循環(huán),通過代碼不難理解實(shí)際上通過這個(gè)循環(huán)定義了一個(gè)字典,這個(gè)字典有52個(gè)key value。這其實(shí)就是將a-z A-Z大小寫兩套英文字母重新做了對應(yīng)。具體是怎樣對應(yīng)的就要去看chr()函數(shù)了。chr()函數(shù)提供了數(shù)字和ascii字符對應(yīng)的功能。在段代碼里看似混亂的字符串被重新做了對應(yīng),它的對應(yīng)關(guān)系就保存在了d這個(gè)字典里。

接下來就是輸出的環(huán)節(jié)了,join后面是一個(gè)列表推導(dǎo)式,它會逐個(gè)讀取每個(gè)字符然后找到字典里保存的對應(yīng)關(guān)系。這里用到了get()函數(shù),它的作用是找到字典中key對應(yīng)的value,第二個(gè)參數(shù)指定了如果找不到對應(yīng)的值返回的默認(rèn)值是什么。之前提到d字典保存了英文大小寫總共52個(gè)字符的對應(yīng)值,但是這里面標(biāo)點(diǎn)符號空格換行符之類的值是沒有保存對應(yīng)關(guān)系的,所以在沒有找到的情況下會把輸入的值原樣返回。最后需要join函數(shù)吧整個(gè)列表拼接成一個(gè)字符串,不然打印出來東西就會像是這個(gè)樣子了:

["T", "h", "e", " ", "Z", "e", "n", " ", "o", "f", " ", "P", "y", "t", "h", "o", "n", ",", " ", "b", "y", " ", "T", "i", "m", " ", "P", "e", "t", "e", "r", "s", " ", " ", "B", "e", "a", "u", "t", "i", "f", "u", "l", " ", "i", "s", " ", "b", "e", "t", "t", "e", "r", ".....

通過上面的分析我們可以看到這個(gè)非常簡單的功能并沒有用定義一個(gè)字符串然后打印的簡單方式實(shí)現(xiàn)。它的實(shí)現(xiàn)利用了chr()函數(shù),get()函數(shù),join()函數(shù),還涉及了列表推導(dǎo)式,是一個(gè)非常有內(nèi)容的實(shí)現(xiàn)。

總結(jié)

以上是生活随笔為你收集整理的python import 原理-Python之禅-import this的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。