飆的Python小學堂:This-Python之禪(一)

我們上次提到了import這個方法跟Python背後的設計哲學,這一次我們就要來瞭解Python的設計哲學。
(上次的文章連結)

首先一樣,打開我們的Python IDLE(或是其他開發環境)。

輸入import this。

p03-01
我們這次使用Anaconda的Spyder作為示範

我們在這幾次的介紹中,都採用不同的環境。這也說明了Python跨平台的能力。

執行後,會出現一篇文章。

p03-02

我們下面提供了一些解釋:

The Zen of Python, by Tim Peters

Python之禪,Tim Peters作於1999年

 

Beautiful is better than ugly.

優美勝於醜陋。

Python,以編寫優美的程式碼為目標。

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.

這並不是件容易的事,誰叫你不是荷蘭人呢?

找出一種明顯的解法,在一開始並不容易,畢竟我們都不是Python之父。

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的命名空間。

 

上面的「禪」中有幾個有趣的地方:

  • Right now一般可以解釋為「現在」,而這裡卻也能做為「正確」解釋。
    「即使不做出程式,勝於找出並完成有『正確』作法的程式;作出程式仍勝於不動手做。」
    所謂的「正確」作法,可能是指為了心中的完美而加入不必要又難以維護的功能;又或者是為了盡早發佈而留下糟糕的結構。這兩者在開發實務上都是正確的,但也都會帶來麻煩,還不如不做。

    這是一個雙關句,然而「禪」中卻要我們停止猜測雙關,找出簡單的解釋:現在。

  • Dutch是荷蘭人的代稱,用來指Python之父吉多·范·羅蘇姆(Guido van Rossum)。

當我們打開this的原始檔時,可以發現更有趣的地方,不過這就留待下次討論了。