可愛的 Python Python 之優雅與瑕疵

2021-04-12 23:49:44 字數 915 閱讀 8796

自從 python 1.5.2(乙個長期以來一直穩定且可靠的版本)邁入 「**時代」 以來,python 增加了許多語法特性以及內建函式和型別。這些改進單獨地看都是合理的調整,但是作為乙個整體,它們使 python 變得更加複雜,不再是有經驗的程式設計師 「花上乙個下午」 就能夠掌握的語言了;另外,一些修改在帶來好處的同時也有缺陷。

在本文中,我要討論在最近幾個 python 版本中增加的不那麼引人注目的特性, 我將分析哪些改進具有真正的價值,哪些特性只是不必要地增加了複雜性。我希望向所有並非一直使用 python 的程式設計師指出真正具有價值的東西。這包括使用其他語言的程式設計師以及只將程式設計當做副業的科學家。當遇到一些難題時,我會提供解決方案。

不可比較的麻煩

在 python 2.0 和 python 2.1 之間,發生了一些奇怪的變化。以前可以比較的物件在進行比較時卻引發了異常。具體地說,複數無法與其他數字進行比較了,包括其他複數以及整數、浮點數和長整數。實際上,在此之前,比較 unicode 字串和文字字串時就可能會遇到這個問題,但那只發生在一些極端情況下。

我認為,這些修改很怪異,沒有必要。在 1.5.2 的**時代,無論比較什麼物件,不等操作符總會返回乙個結果。當然,結果不一定是有意義的 —— 比如字串和浮點數的比較就沒有意義。但是,至少我們總會得到乙個一致的結果。

出現這些修改之後,一些 python 支持者認為不允許對不同型別的物件進行不等比較是件好事,只有定義了定製的比較函式之後,才能進行這種比較。我覺得,在處理定製類和多重繼承時,編寫定製的比較函式實際上很需要技巧。另外,不能在浮點數、整數和長整數(比如 decimal)之間進行比較是非常不方便的。但是,或許可以定義乙個合理的規則。

但是,無論定義什麼樣的規則,它都與 python 過去的做法有非常大的差異。現在的情況是比較行為無規律可循,即使知道比較的物件的型別,也無法確定它們是否是可比較的(而且不等性既非可傳遞也非封閉式):

可愛的猴子

可愛的猴子 時間限制 10000 ms 空間限制 65536 kb 問題描述 樹上有n只猴子。它們編號為 1 到n。1 號猴子用它的尾巴勾著樹枝。剩下的猴子都被其他的猴子用手抓著。每只猴子的每隻手可以抓住另乙隻猴子的尾巴。從0 時刻開始,每一秒都有乙隻猴子鬆開它的乙隻手。這會導致一些猴子掉到地上 它...

可愛的猴子

可愛的猴子 時間限制 10000 ms 空間限制 65536 kb 問題描述 樹上有n只猴子。它們編號為 1 到n。1 號猴子用它的尾巴勾著樹枝。剩下的猴子都被其他的猴子用手抓著。每只猴子的每隻手可以抓住另乙隻猴子的尾巴。從0 時刻開始,每一秒都有乙隻猴子鬆開它的乙隻手。這會導致一些猴子掉到地上 它...

可愛的「迷你包」

在想像中的所謂 迷你包 mini kit 是指,預裝了 ubuntu 系統的袖珍 u盤。迷你包 隨身帶,辦公 娛樂兩不礙。迷你包 如何定價,使我苦思一天。比方說,乙個某種品牌的容量為 4gb的 u盤,定價為 400元人民幣 設想 而同一品牌的容量為 2gb的 u盤,一般定價為 200元人民幣。也就是...