回覆列表
  • 1 # Bean蠶豆

    我的理解應該是大家口中所說的pythonic,什麼是pythonic?其實是很難定義,我們無法透過搜尋引擎找到準確的答案。但很難定義的概念絕非意味著其定義沒有價值,尤其不能否定它對編寫優美python程式碼的指導作用。

    對於pythonic的概念,就像“一百個觀眾有一百個哈姆雷特”,但大家心目中都認同一個具體的指南,那就是Tim Peters的《The Zen of Python》,充滿詩意,有幾點非常深入人心:

    美勝醜,顯勝隱,簡勝雜,雜勝亂,平勝陡,疏勝密。

    找到簡單問題的一個就方法,最好是唯一的方法。

    難以解釋的實現,源自不好的主意;如有非常棒的主意,它的實現肯定易於解釋。

    遵循Pythonic的程式碼,看起來就像虛擬碼。其實,所有的虛擬碼都可以輕易地轉換為可執行的程式碼。所以,綜合地說,Pythonic可以這麼理解:充分體現Python自身特色的程式碼風格。

    例子1,變數交換值

    int a =1, b=2; int temp = a; a=b; b = temp;

    pythonic的程式碼只需要一行:

    a, b = b, a

    例子2,遍歷

    length = len(alist); i = 0; while i < length: do_sth_with(alist[i]) i += 1

    pyhonic的程式碼如下所示: for i in alist: do_sth_with(i)

    靈活地使用迭代器是一種Python風格。比如,需要安全地關閉檔案描述符,可以用以下with語句:with open(path,"r") as f: do_sth_with(f)

    透過上述程式碼的對比,能讓大家清晰地認識到Pythonic的一個要求,就是對Python語法本身的充分發揮,寫出來的程式碼帶著python味兒,而不是看著像C語言程式碼,或者Java程式碼。

    例子3,標準庫

    寫pythonic程式需要對標準庫有充分的理解,特別是內建函式和內建資料型別。比如,對於字串格式化,一般這樣寫:print "Hello %s!" %("Tom",)

    其實%s是非常影響可讀性的,因為數量多了以後,很難清楚哪一個佔位符對應哪一個實參,所以相對應的pythonic程式碼是這樣的:print "Hello %(name)s!" %("name":"Tome")

    上面舉的例子是Pythonic的程式設計風格,有的回答說PEP8,我的理解PEP8是一種程式設計規範,和python的風格還是有點區別的。就像你用一箇中間變數交換值,PEP8是不會提示有問題,會透過PEP的檢測。但是不是一種Pythonic的風格。

  • 中秋節和大豐收的關聯?
  • 如何使自己在工作中保持一顆平常心遠離煩惱?