- 確定所用的Python版本
Python2與3代碼是不兼容的。目前Python2的功能開發(fā)已經(jīng)停止,只會修復bug,而Python3不是足夠的穩(wěn)定。Python2適配到Python3的工具有2to3、six等。 - 遵循PEP8風格指南
《Python Enhancement Proposal #8》簡稱PEP8,針對python代碼格式編訂的風格指南。
空白:
* 使用space來表示縮進,而不是tab
* 每行字符數(shù)不應超過79個字符
* 對于占據(jù)多行的長表達式,除了首行外,其他行都應再縮進4個空格
* 文件中的函數(shù)與類之間應該空兩行
* 同一個類中,方法間應空一個空行
* 在使用下標來獲取列表元素、調(diào)用函數(shù)或給關鍵字參數(shù)賦值的時候,不要在旁加空格
命名:
* 函數(shù)、變量、屬性應該用小寫字母來拼寫,單詞間用下劃線連接
* 受保護的實例屬性,應該用單個下劃線開頭
* 私有實例,應該用兩個下劃線開頭
* 類與異常,每個單詞首字母大寫
* 模塊級別的常量,所有單詞大寫,單詞間用下劃線連接
* 類中的實例方法,首個參數(shù)命名為self,表示該對象自身
* 類方法的首個參數(shù)命名為cls,表示該類自身
表達式和語句:
* 采用內(nèi)聯(lián)形式的否定詞,而不是把否定詞放在整個表達式前。例如:if a is not b 而不是 if not a is b
* 不要通過檢測長度的辦法來判斷列表是否為[]或者空值,而是if not somelist
* 不要編寫單杠的if語句、for循環(huán)、while循環(huán)以及except復合語句,而是多行書寫,閱讀更清晰
* import 語句應該總是放在文件開頭
* 引入模塊的時候,應該使用絕對名稱,而不是根據(jù)當前模塊的路徑來使用相對的名稱
* 文件中import語句應該分為三個部分,分別為標準庫、第三方模塊和自用模塊。每個部分,按模塊名稱的字母順序來排列
- 了解bytes、str與unicode的區(qū)別
python3的兩種字符序列類型:bytes和str。bytes為原始的8位字節(jié),str則包含unicode字符。
python2有兩種字符序列類型:str和unicode,str包含原始8位字節(jié)。
關于這個請關注我的另一篇blog--《編碼問題以及其在Python2與3的差異》
想把unicode轉(zhuǎn)為二進制數(shù)據(jù),使用encode方法,相反則使用decode方法 - 用輔助函數(shù)來取代復雜的表達式
表達式復雜了,就拆分為小塊 - 了解切割序列的方法
- 在單次切片操作內(nèi),不要同時制定start、end和stride。
list[start:end:stride] - 用列表推導來取代map和filter
[x+1 for x in list] - 不要使用含有兩個以上表達式的列表推導
- 用生成器表達式來改寫數(shù)據(jù)量較大的列表推導
- 盡量用enumerate取代range
enumerate可以把迭代器包裝為生成器,生成器產(chǎn)生一對值,前者為循環(huán)下標,后者表示對應的元素 - 用zip函數(shù)同時遍歷兩個迭代器
可以把兩個及以上的迭代器封裝為生成器,如果不等長,則以較短的迭代器為準。
itertools的zip_longest函數(shù)可以平行遍歷多個迭代器。 - 不要在for和while循環(huán)后寫else
因為循環(huán)后的else語句塊在循環(huán)結(jié)束后都會執(zhí)行,跟正常邏輯有點不一樣。 - 合理利用try/except/else/finally結(jié)構中代碼塊