《編寫高質量代碼 改善python程序的91個建議》讀書筆記

一、關於函數:不要在函數中定義可變對象爲默認值,使用異常替換返回錯誤,保證通過單元測試。python函數傳遞的是對象的引用。在類的初始化方法裏,參數的默認值應該爲None,因爲默認參數在函數被調用時候僅僅被評估一次。

二、編碼。 最開始使用ASCII使用一個字節(8bit)只能表示128個字符;unicode 實現了從數字代碼到不同語言字符集之間的映射,從而跨平臺、跨語言的要求。但是在實際傳輸過程中,爲了節省內存,實現Unicode 的過程叫 Unicode格式轉換(transformaition format),簡稱UTF。其中最常見的UTF-8對不同範圍的字符使用不同長度的編碼:0x00- 0x7F的字符的UTF-8編碼與ASCII編碼完全相同。UTF-8的最大長度爲4個字節(32bit)。

decode("utf-8")  #將其他編碼對應的字符串解碼成Unicode
encode("utf-8")  #將Unicode編碼轉換爲另一種編碼。

三、import VS from ... import x : from +import 會帶來命名空間衝突。

四、++i 在python裏等價於+(+i) 。+表示正號。

五、使用with open() as f  來進行文件讀寫。文件實現了上下文協議,任何實現了上下文協議的對象都可以成爲上下文管理器。有_enter_() 和_exti()_兩個方法

__enter__():在使用with語句時調用,會話管理器在代碼塊開始前調用,返回值與as後的參數綁定

__exit__():會話管理器在代碼塊執行完成好後調用,在with語句完成時,對象銷燬之前調用

六、異常處理:1. 儘量只在可能拋出異常的語句前加入try。謹慎使用單獨的except 處理所有異常,因爲會掩蓋異常到底在哪裏,只知道發生了異常。注意異常捕獲的順序,在合適的層次處理異常。2. 如果finally 後面的語句裏有return 和break, 同時try捕獲的錯誤在except中找不到對應的異常處理,那麼在執行完finally後,異常便不能被拋出,導致異常丟失。同時finally裏面的return語句是最先被執行的,會覆蓋前面的return語句。因爲不能再finally寫return。

七、字符串連接:優先使用join 申請一次內存 時間複雜度O(n) 。 而 + 連接多個字符串的時候,每個+申請一次內存,複雜度O(n^2)

八、靜態方法和類方法:子類實現某些功能的時候使用類方法可以避免代碼重寫帶來的冗餘。

九、字符串切分: split() 無視所有空格。 split(' ')會保留空字符串。capwords(s):去除兩端空格,並把連續空白字符用一個空格代替。

十、排序。 sorted()    

textbook = {'張三':'7705','李四':'9345'}
from operator import itemgetter  # 獲取第幾個域的值
sorted_pb = sorted(textbook.items(),key=itemgetter(1))
print(sorted_pb)

十一、深拷貝和淺拷貝。深拷貝:包含對象裏面的自對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變。

十二、計數

#Counter類是字典類的子類,是一個容器對象,用來統計散列對象。
from collections import Counter
some_data = ['a','2',2,4,5,'2','b',4,7,'a',5,'d','a','z']
print(Counter(some_data))

十三、traceback 獲取異常發生時候棧的信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章