在Python尋找彩蛋:從“Hello World”的玄機(jī)到Python之禪
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)
也許在你眼里,Python可能只是項(xiàng)目創(chuàng)建、模擬和自動(dòng)化的工具;但在一些人那里,它就像是《頭號(hào)玩家》的電影片場(chǎng),處處暗藏“玄機(jī)”,充滿了有趣的彩蛋。
你是否已經(jīng)厭倦了整體呆在家里?不如來(lái)探索Python中的隱藏功能和小驚喜吧!
1. 最簡(jiǎn)單的“HelloWorld”
你寫出的第一行代碼是什么?一千個(gè)哈姆雷特可能都只有同一個(gè)答案——“HelloWorld”。那么,你有沒(méi)有想過(guò), print( Hello World! )并不是打出這兩個(gè)單詞的唯一方法?
實(shí)際上,只需導(dǎo)入Python開(kāi)發(fā)人員隱藏的模塊就可以實(shí)現(xiàn)HelloWorld。試試這個(gè):
- >>> import __hello__
- Hello World!
包括空格鍵在內(nèi),此代碼只有16個(gè)字符!這可以說(shuō)是“最簡(jiǎn)單的”HelloWorld程序之一。請(qǐng)注意,不能在Python程序中重新導(dǎo)入模塊,所以每次運(yùn)行時(shí)可以打印一次信息。
2. Python之禪
這是在PEP20中提出的概念。PEP是指Python的增強(qiáng)提案。
Python是您最喜歡的語(yǔ)言嗎?喜歡它什么?是設(shè)計(jì)嗎?有20條描述Python設(shè)計(jì)的指導(dǎo)原則,可通過(guò)以下方式找到其中的19條:
- >>> import this
剩下的那條去哪兒了?筆者猜測(cè),人不可能無(wú)所不知。以下是前三條指導(dǎo)原則:
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
必須感謝開(kāi)發(fā)人員為制作如此優(yōu)雅且易讀的編程語(yǔ)言方面所付出的努力。這也是迄今為止Python開(kāi)發(fā)者指南中唯一被稱為“彩蛋”的“官方”程序。
3. 體驗(yàn)反重力漫畫
一行Python代碼,就可以體驗(yàn)反重力漫畫!
- import antigravity
試試看!請(qǐng)記住,這么做可能會(huì)被困在外太空,瀏覽幾個(gè)小時(shí)xkcd網(wǎng)絡(luò)漫畫。
4. 括號(hào)
與許多其他編程語(yǔ)言不同,Python在構(gòu)造語(yǔ)句、函數(shù)和循環(huán)時(shí)實(shí)際上并不使用花括號(hào){},但以后可能會(huì)用。
__future__ 模塊包含不兼容更改,這些更改將在不久的將來(lái)強(qiáng)制實(shí)施。例如,在Python2.6或2.7中從__future__ 導(dǎo)入 print_function允許“print”變成接受參數(shù) print()的函數(shù),就像在Python 3中一樣。
看看從__future__開(kāi)始,括號(hào)將如何工作:
- >>> from __future__ importbraces
- SyntaxError: not a chance
5. this.py
還記得Python之禪的前三行嗎?
深入挖掘并找到這個(gè)模塊文件this.py后,就會(huì)發(fā)現(xiàn),這是迄今為止最漂亮、最明確、最簡(jiǎn)單的代碼。
6. 散列
無(wú)窮大和NaN的散列。
- >>> hash(float( inf ))
- 314159
- >>> hash(float( nan ))
- 0
這個(gè)彩蛋是在Reddit上找到的。筆者真想知道生命、宇宙與萬(wàn)事萬(wàn)物的終極解答。(出處:《銀河系漫游指南》。)
7. 巴里叔叔
關(guān)于運(yùn)算符選擇的爭(zhēng)論已持續(xù)了42個(gè)年頭。是時(shí)候解決了!
這一問(wèn)題是在PEP 401中提出的,以下內(nèi)容并不難猜到。著名的Python開(kāi)發(fā)者巴里·華沙 (又名巴里叔叔)被“選中”成為終身友好語(yǔ)言叔叔,簡(jiǎn)稱FLUFL。
他制定了一些“修改”,用鉆石操作符<>替換不等式運(yùn)算符 != 。如果同意巴里叔叔的觀點(diǎn),可以導(dǎo)入這個(gè)有趣的庫(kù),并且<> 語(yǔ)法將會(huì)生效,而 !=會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。
- >>> from __future__ importbarry_as_FLUFL>>> 0 != 1
- SyntaxError: with Barry as BDFL, use <> instead of != >>> 0<> 1
- True
- >>> 1 <> 1
- False
其實(shí)彩蛋還有更多,接下來(lái)就自己探索吧,當(dāng)你打開(kāi)這扇門,Python世界從此妙趣橫生。