我的理解應該是大家口中所說的pythonic,什麼是pythonic?其實是很難定義,我們無法透過搜尋引擎找到準確的答案。但很難定義的概念絕非意味著其定義沒有價值,尤其不能否定它對編寫優美python程式碼的指導作用。
對於pythonic的概念,就像“一百個觀眾有一百個哈姆雷特”,但大家心目中都認同一個具體的指南,那就是Tim Peters的《The Zen of Python》,充滿詩意,有幾點非常深入人心:
美勝醜,顯勝隱,簡勝雜,雜勝亂,平勝陡,疏勝密。
找到簡單問題的一個就方法,最好是唯一的方法。
難以解釋的實現,源自不好的主意;如有非常棒的主意,它的實現肯定易於解釋。
遵循Pythonic的程式碼,看起來就像虛擬碼。其實,所有的虛擬碼都可以輕易地轉換為可執行的程式碼。所以,綜合地說,Pythonic可以這麼理解:充分體現Python自身特色的程式碼風格。
int a =1, b=2; int temp = a; a=b; b = temp;
pythonic的程式碼只需要一行:
a, b = b, a
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程式碼。
寫pythonic程式需要對標準庫有充分的理解,特別是內建函式和內建資料型別。比如,對於字串格式化,一般這樣寫:print "Hello %s!" %("Tom",)
其實%s是非常影響可讀性的,因為數量多了以後,很難清楚哪一個佔位符對應哪一個實參,所以相對應的pythonic程式碼是這樣的:print "Hello %(name)s!" %("name":"Tome")
我的理解應該是大家口中所說的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的風格。