人工智能人人通生态雲平台

河南人民出版社有限責任公司

2019年12月28日 星期六

咨詢熱線

400-6908-558

在線學習
153 人
雲校學校
220 所
雲校老師
158 人
雲校學生
451 人
雲校家長
51 人

立即報名

平台動态

Platform Dynamics

您的位置:币安币官网 > 平台動态 > 新聞詳情

瞧瞧,這樣的代碼才叫 Pythonic


Python由于語言的簡潔性,讓我們以人類思考的方式來寫代碼,新手更容易上手,老鳥更愛不釋手。

要寫出 Pythonic(優雅的、地道的、整潔的)代碼,還要平時多觀察那些大牛代碼,這裡明哥收集了一些比較常見的 Pythonic 寫法,幫助你養成寫優秀代碼的習慣。

變量交換

交換兩個變量的值,正常都會想利用一個中間臨時變量來過渡。

能用一行代碼解決的(并且不影響可讀性的),決不用三行代碼。

列表推導

下面是一個非常簡單的 for 循環。

在一個 for 循環中,如果邏輯比較簡單,不如試用一下列表的列表推導式,雖然隻有一行代碼,但也邏輯清晰。

單行表達式

上面兩個案例,都将多行代碼用另一種方式寫成了一行代碼。

這并不意味着,代碼行數越少,就越 Pythonic 。

比如下面這樣寫,就不推薦。

建議還是按照如下的寫法來

帶索引遍曆

使用 for 循環時,如何取得對應的索引,初學者習慣使用 range + len

更好的做法是利用 enumerate 這個内置函數

序列解包

使用 * 可以對一個列表解包

字符串拼接

如果一個列表(或者可疊代對象)中的所有元素都是字符串對象,想要将他們連接起來,通常做法是

更推薦的做法是使用 join 函數

真假判斷

判斷一個變量是否為真(假),新手習慣直接使用 == 與 True、False、None 進行對比

實際上,""、[]、{}這些沒有任何元素的容器都是假值,可直接使用if not xx來判斷。

訪問字典元素

當直接使用[]來訪問字典裡的元素時,若key不存在,是會抛異常的,所以新會可能會先判斷一下是否有這個 key,有再取

更推薦的做法是使用get來取,如果沒有該 key 會默認返回 None(當然你也可以設置默認返回值)

操作列表

下面這段代碼,會根據條件過濾過列表中的元素

實際上可以使用列表推導或者高階函數 filter 來實現

除了 filter 之外,還有 map、reduce 這兩個函數也很好用

文件讀取

文件讀取是非常常用的操作,在使用完句柄後,是需要手動調用 close 函數來關閉句柄的

如果代碼寫得太長,即使你知道需要手動關閉句柄,卻也會經常會漏掉。因此推薦養成習慣使用with open來讀寫文件,上下文管理器會自動執行關閉句柄的操作

代碼續行

将一個長度較長的字符串放在一行中,是很影響代碼可讀性的(下面代碼可向左滑動)

稍等注重代碼可讀性的人,會使用三個引号來續寫

不過,對我來說,我更喜歡這樣子寫 使用括号包裹()

導包的時候亦是如此

顯式代碼

有時候出于需要,我們會使用一些特殊的魔法來使代碼适應更多的場景不确定性。

但若非必要,請不要那麼做。無端增加代碼的不确定性,會讓原先本就動态的語言寫出更加動态的代碼。

使用占位符

對于暫不需要,卻又不得不接收的的變量,請使用占位符

鍊式比較

對于下面這種寫法

其實還有更好的寫法

如果你理解了上面的鍊式比較操作,那麼你應該知道為什麼下面這行代碼輸出的結果是 False

三目運算

對于簡單的判斷并賦值

其實是可以使用三目運算,一行搞定。