本文是 Python 之禪特別系列的第二篇,咱們將要關注其中第三與第四條原則:簡單與複雜。python
Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y plus rien à retrancher.linux
It seems that perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.git「完美並不是無可增,而是不可減。」程序員
—Antoine de Saint-Exupéry, Terre des Hommes, 1939github
編程時最常有的考量是與複雜性的鬥爭,只想寫出讓旁人無從下手的繁雜代碼,對每一個程序員來說都算不上難事。假若未能觸及代碼的簡繁取捨,那麼 《Python 之禪》 就有了一角殘缺。編程
尚有選擇餘地時,應該選簡單的方案。Python 少有不可爲之事,這意味着設計出巴洛克風格(LCTT 譯註:即誇張和不理性)的程序只爲解決淺顯的問題不只有可能,甚至很簡單。小程序
正因如此,編程時應當謹記,代碼的簡單性是最易丟失,卻最難復得的。函數
這意味着,在能夠選用函數來表達時不要去引入額外的類;避免使用強力的第三方庫每每有助於你針對迫切的問題場景設計更穩當的簡短函數。不過其根本的意圖,旨在讓你減小對未來的盤算,而去着重解決手頭的問題。工具
以簡單和優美做爲指導原則的代碼相比那些想要囊括未來一切變數的,在往後要容易修改得多。測試
把握用詞的精確含義對於理解這條使人費解的原則是相當重要的。形容某事複雜complex,是說它由許多部分組成,着重組成成分之多;而形容某事錯綜複雜complicated,則是指其包含着差別巨大、難以預料的行爲,強調的是各組成部分之間的雜亂聯繫。
解決困難問題時,每每沒有可行的簡單方案。此時,最 Python 化的策略是「自底向上bottom-up」地構建出簡單的工具,以後將其組合用以解決該問題。
這正是對象組合object composition這類技術的閃耀之處,它避免了錯綜複雜的繼承體系,轉而由獨立的對象把一些方法調用傳遞給別的獨立對象。這些對象都能獨立地測試與部署,最終卻能夠組成一體。
「自底建造」 的另外一例便是單分派泛函數singledispatch的使用,拋棄了錯綜複雜的對象以後,咱們獲得是簡單、幾乎無行爲的對象以及獨立的行爲。
via: https://opensource.com/article/19/12/zen-python-simplicity-complexity
做者:Moshe Zadka 選題:lujun9972 譯者:caiichenr 校對:wxy
訂閱「Linux 中國」官方小程序來查看