為什麼 Python 程式碼要寫得美觀而明確
歡迎閱讀“Python 光明節(Pythonukkah)”系列文章,這個系列文章將會討論《Python 之禪》。我們首先來看《Python 之禪》裡的前兩個原則:美觀與明確。
早在 1999 年,Python 的貢獻者之一,Tim Peters 就提出了《Python 之禪》,直到二十年後的今天,《Python 之禪》中的 19 條原則仍然對整個社群都產生著深遠的影響。為此,就像慶典光明的光明節一樣,我們舉行了這一次的“Python 光明節”。首先,我們會討論《Python 之禪》中的前兩個原則:美觀和明確。
“Hanukkah is the Festival of Lights,
Instead of one day of presents, we get eight crazy nights.”
—亞當·桑德勒,光明節之歌
美觀勝於醜陋
著名的《計算機程式的構造和解釋》中有這麼一句話:程式碼是寫給人看的,只是恰好能讓機器執行。機器並不在乎程式碼的美觀性,但人類在乎。
閱讀美觀的程式碼對人們來說是一種享受,這就要求在整套程式碼中保持一致的風格。使用諸如 Black、flake8、Pylint 這一類工具能夠有效地接近這一個目標。
但實際上,只有人類自己才知道什麼才是真正的美觀。因此,程式碼審查和協同開發是其中的不二法門,同時,在開發過程中傾聽別人的意見也是必不可少的。
最後,個人的主觀能動性也很重要,否則一切工具和流程都會變得毫無意義。只有意識到美觀的重要性,才能主動編寫出美觀的程式碼。
這就是為什麼美觀在眾多原則當中排到了首位,它讓“美”成為了 Python 社群的一種價值。如果有人要問,”我們真的在乎美嗎?“社群會以程式碼給出肯定的答案。
明確勝於隱晦
人類會歡慶光明、懼怕黑暗,那是因為光能夠讓我們看到難以看清的事物。同樣地,儘管有些時候我們會不自覺地把程式碼寫得含糊不清,但明確地編寫程式碼確實能夠讓我們理解很多抽象的概念。
“為什麼類方法中要將 self
顯式指定為第一個引數?”
這個問題已經是老生常談了,但網路上很多流傳已久的回答都是不準確的。在編寫元類時,顯式指定 self
引數就顯得毫無意義。如果你沒有編寫過元類,希望你可以嘗試一下,這是很多 Python 程式設計師的必經之路。
顯式指定 self
引數的原因並不是 Python 的設計者不想將這樣的元類視為“預設”元類,而是因為第一個引數必須是顯式的。
即使 Python 中確實允許非顯式的情況存在(例如上下文變數),但我們還是應該提出疑問:某個東西是不是有存在的必要呢?如果非顯式地傳遞引數會不會出現問題呢?有些時候,由於種種原因,這是會有問題的。總之,在寫程式碼時一旦能夠優先考慮到明確性,至少意味著能對不明確的地方提出疑問並對結果作出有效的估計。
via: https://opensource.com/article/19/12/zen-python-beauty-clarity
作者:Moshe Zadka 選題:lujun9972 譯者:HankChow 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- 為什麼程式設計師要儘量少寫程式碼程式設計師
- 為什麼寫程式碼讓人家覺得你很厲害?
- Python是什麼?為什麼要掌握python?Python
- 程式碼之間為什麼要加空格?
- 為什麼我要垂直對齊程式碼
- 為什麼谷歌要執行嚴格的程式碼編寫規範谷歌
- 為什麼我要豎向對齊程式程式碼
- 為什麼要選擇Python進行Web開發?記得收藏!PythonWeb
- 為什麼我們要選用 Elasticsearch 而不用 SolrElasticsearchSolr
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 為什麼是“程式猿”而不是“程式媛”?
- [譯]為什麼要寫 super(props)
- 為什麼要寫技術部落格?
- 為什麼要寫成List a = new ArrayList()
- 為什麼我要寫自己的框架?框架
- 孩子們為什麼要學Python程式設計Python程式設計
- 程式設計師 為什麼要堅持寫部落格程式設計師
- Python到底是什麼?為什麼要學Python?Python
- 面試官:為什麼忘記密碼要重置而不是告訴你原密碼?面試密碼
- 分散式鎖為什麼要選擇Zookeeper而不是Redis?分散式Redis
- 直播平臺為什麼要接入第三方美顏SDK而不是單獨開發?
- 作為程式設計師為什麼要閱讀原始碼程式設計師原始碼
- 為什麼還要記密碼密碼
- 為什麼要閱讀原始碼原始碼
- 為什麼if中null要寫在前面?Null
- 我們為什麼要技術寫作
- 為什麼我要編寫自己的UIKitUI
- 為什麼要學習Python?Python可以做什麼事情?Python
- 第17條:要麼為繼承而設計,並提供文件說明,要麼就禁止繼承繼承
- 程式設計師:你的程式碼為誰而寫?程式設計師
- Koala Framework是什麼?我為什麼要寫這個框架?Framework框架
- Python優勢是什麼?為什麼要學習?Python
- 為什麼你寫的程式碼糟透了?
- 為什麼要學習Python?學習Python可以做什麼?Python
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- 為什麼我要垂直對齊程式碼(你也要如此!)
- 為什麼程式設計師千萬不要重寫程式碼?程式設計師
- 為什麼程式設計師應該少寫程式碼程式設計師