翻譯:王婷
校對:丁楠雅
本文共1000字,建議閱讀5分鐘。
本文將帶你挖掘Python中隱藏的彩蛋。
Python當然能讓你上天!
沒試過?別擔心,我來教你。和Python裡的其他東西一樣,它非常簡單。你只需要敲入下面這行反重力代碼
import antigravity
這是啥?
這是個彩蛋。import antigravity將打開一個指向經典XKCD漫畫的網頁(source:https://xkcd.com/353/),裡面提到了Python。你知道嗎,開發者並沒有止步於此,彩蛋裡還有一個彩蛋。
如果你查看代碼(source:https://github.com/python/cpython/blob/master/Lib/antigravity.py#L7-L17),你會看到一個函數定義用來實現XKCD’s的geohashing算法(source:https://xkcd.com/426/)。
還有類似的彩蛋嗎?
當然!我在網上找到了更多的彩蛋:
1. Python的禪宗
在命令行中輸入:
import this
即可獲得 Tim Peters 的《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!
譯文如下:
Python之禪
賴勇浩翻譯
優美勝於醜陋(Python 以編寫優美的代碼為目標)
明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格相似)
簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)
複雜勝於凌亂(如果複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔)
扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
可讀性很重要(優美的代碼是可讀的)
即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫 except:pass 風格的代碼)
當存在多種可能,不要嘗試去猜測
而是儘量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
雖然這並不容易,因為你不是 Python 之父(這裡的 Dutch 是指 Guido )
做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)
2. Python知道愛是複雜的
>>> love = this
>>> this is love
True
>>> love is True
False
>>> love is False
False
>>> love is not True or False
True
>>> love is not True or False; love is love # Love is complicated
True
Python中的this模塊是Python禪宗(PEP 20)(source:https://www.python.org/dev/peps/pep-0020/) 中的一個彩蛋。有趣吧?你可以看看this.py(source:https://hg.python.org/cpython/file/c3896275c0f6/Lib/this.py)中的具體實現。
有趣的是,禪宗的代碼是自相矛盾的(這可能是Python裡唯一發生這種情況的地方)。愛不是真或假,愛就是愛這句話讀起來有點諷刺,卻不言自明。
3. 花括號的使用
如果你不喜歡在Python中使用空格來表示作用域,想使用C風格的花括號{},你試著導入:
from__future__ importbraces
然後你會得到:
File "some_file.py", line 1
from __future__ import braces
SyntaxError: not a chance
__future__模塊通常用來提供Python未來版本的一些功能。這裡“未來”對“花括號”做了小小的諷刺:想都別想!這是Python社區對這個問題的彩蛋。
4. “Hello world”程序可以有多簡單?
夠簡單了吧:
>>> import __hello__
Hello World!
5. 來認識“親切大叔”(Friendly Language Uncle For Life)
>>>from__future__ importbarry_as_FLUFL
>>> "Ruby"!= "Python"# there's no doubt about it
File"some_file.py", line 1
"Ruby"!= "Python"
^
SyntaxError: invalid syntax
>>> "Ruby"<> "Python"
True
歐了。
這個彩蛋與2009年4月1日發佈的PEP-401有關(401,你懂得)。鑑於Python3.0裡的不!=是一個糟糕的損耗程序員手指的存在,BDFL的並不存在的繼任者FLUFL又將其改回去了。更多彩蛋見(source:https://www.python.org/dev/peps/pep-0401/)。
譯者注:BDFL(Benevolent Dictator For Life)直譯為“仁慈的獨裁者”,指Python的發明者Guido van Rossum在Python開發上享有監管權和決定權。2009年的愚人節,Guido宣佈退休並任命Barry Warsaw為繼任者,繼任者的正式頭銜是“親切大叔(Friendly Language Uncle For Life,FLUFL)”,FLUFL立刻公佈了一個PEP文檔(Python編碼規範文檔),其中之一就是將不等號運算符!=重新規定為舊運算符<>。本文將其作為Python彩蛋。
6. 無窮大
Python中的拼寫是有目的的。
>>> infinity = float('infinity')
>>> hash(infinity)
314159
>>> hash(float('-inf'))
-314159
在Python中,無窮大的hash是105×π。有趣的是, float(“-inf”)的hash在Python 3版本里是“-105×π”而在Python 2版本里是“-105×e”。
還想看更多彩蛋?
我已經花了好幾個月的時間來挖掘Python裡的這些神奇彩蛋。
我推薦你看 What the f*ck Python?(source:https://github.com/satwikkansal/wtfpython)Python裡的各種微妙而複雜的代碼片段。
原文標題:Can Python Make You fly?
原文鏈接:
https://www.codementor.io/satwikkansal/can-python-make-you-fly-fuolx8uxu
譯者簡介
王婷,南京理工大學在讀研究生,愛笑得有眼角魚尾紋的運氣不賴的女生。不喜歡呆板、教條、無聊,喜歡接觸新事物,參加新活動,融入新環境,結交新朋友,互相學習,取長補短。
閱讀更多 數據派THU 的文章