我的理解應該是大家口中所說的pythonic,什么是pythonic?其實是很難定義,我們無法通過搜索引擎找到準確的答案。但很難定義的概念絕非意味著其定義沒有價值,尤其不能否定它對編寫優(yōu)美python代碼的指導作用。
對于pythonic的概念,就像“一百個觀眾有一百個哈姆雷特”,但大家心目中都認同一個具體的指南,那就是TimPeters的《TheZenofPython》,充滿詩意,有幾點非常深入人心:
美勝丑,顯勝隱,簡勝雜,雜勝亂,平勝陡,疏勝密。
找到簡單問題的一個就方法,最好是唯一的方法。
難以解釋的實現(xiàn),源自不好的主意;如有非常棒的主意,它的實現(xiàn)肯定易于解釋。
遵循Pythonic的代碼,看起來就像偽代碼。其實,所有的偽代碼都可以輕易地轉換為可執(zhí)行的代碼。所以,綜合地說,Pythonic可以這么理解:充分體現(xiàn)Python自身特色的代碼風格。
例子1,變量交換值
inta=1,b=2;inttemp=a;a=b;b=temp;
pythonic的代碼只需要一行:
a,b=b,a
例子2,遍歷
length=len(alist);i=0;whilei<length:do_sth_with(alist[i])i+=1
pyhonic的代碼如下所示:foriinalist:do_sth_with(i)
靈活地使用迭代器是一種Python風格。比如,需要安全地關閉文件描述符,可以用以下with語句:withopen(path,'r')asf:do_sth_with(f)
通過上述代碼的對比,能讓大家清晰地認識到Pythonic的一個要求,就是對Python語法本身的充分發(fā)揮,寫出來的代碼帶著python味兒,而不是看著像C語言代碼,或者Java代碼。
例子3,標準庫
寫pythonic程序需要對標準庫有充分的理解,特別是內置函數(shù)和內置數(shù)據(jù)類型。比如,對于字符串格式化,一般這樣寫:print'Hello%s!'%('Tom',)
其實%s是非常影響可讀性的,因為數(shù)量多了以后,很難清楚哪一個占位符對應哪一個實參,所以相對應的pythonic代碼是這樣的:print'Hello%(name)s!'%('name':'Tome')