有趣且鮮為人知的 Python “特性”

劉志軍發表於2018-12-05

GitHub 上有個非常牛逼的倉庫,作者收集了很多有趣且鮮為人知的 Python “特性”。這些特性有些是真正的特性,也有些是陷阱,因為光從表面看起來就覺得反人類直覺,而所有的一切,其實都是 Cpython 內部實現中利弊之間的的權衡,有優點就有缺點。舉個和字串相關的特別例子:

>>> a = "wtf"
>>> b = "wtf"
>>> a is b
True
複製程式碼

這個比較好理解,a 和 b 指向同一個物件。

>>> a = "wtf!"
>>> b = "wtf!"
>>> a is b
False
複製程式碼

多了一個感嘆號❗,兩個變數指向的就不是同一個物件了。

再來看:

>>> a, b = "wtf!", "wtf!"
>>> a is b
True
複製程式碼

如果把兩個變數寫在一行,又指向同一個物件了。初學者看了一臉懵逼,即使你是有經驗的 Python 開發者,第一次見到這種情況也會大為驚訝,原來 Python 中還有如此騷操作。 如果把程式碼放在IDE中執行,結果又不一樣:

a = "wtf!"
b = "wtf!"
print(a is b)  # True
複製程式碼

輸出結果是 True,是不是覺得太匪夷所思了。 其實,這裡面涉及到的知識點是CPython 為了提高效能對字串物件做的優化,涉及到字串的 intern 機制,還有程式碼塊的知識等概念。

當然這個庫還總結了很多很多類似讓你驚訝的操作,比如關於雜湊操作,有關字典特性,預設可變引數陷阱等等。總共有近100來個知識點總結。強烈建議大家好好研讀,有利於對 Pytho 的進一步提高。目前這個庫已經有將近10000人關注,而且現在有網友提供了中文版了,這無疑給了不習慣閱讀英語閱的人有一個利好訊息。

英文地址:github.com/satwikkansa…
中文地址:github.com/leisurelich…

方便你閱讀,我將其製作了一份PDF格式了,方便你離線閱讀。連結: pan.baidu.com/s/15eM-hryL… 提取碼: 6p26 你也可以在微信公眾號「Python之禪」後臺回覆關鍵詞「1」獲取其它電子書

PS:有些人對標題表示反感,抱歉,換個普通點的。還有,你們如果不喜歡,直接X掉頁面,謝謝。

相關文章