標籤:讀書筆記 python 對象 文檔 標準
引論
建議1:理解pythonic的概念
pythonic也許可以遮陽定義:充分體現python自身特色的代碼風格。
python中兩個變數交換隻需一行:
a,b= b,a
遍曆一個容器時可以為:
for i in alist: do_sth_with(i)
開啟檔案,需要安全的關閉檔案可以為:
with open(path,’r’) as f: do_sth_with(f)
如果想倒序輸出一個列表可以這樣:
printlist(reversed(a))
寫pythonic程式需要對標準庫有充分的理解,特別是內建函數和內建資料類型。比如對於字串格式化,一般這樣寫:print‘Hello%s!’%(‘Tom’)。其實%s是非常影響可讀性的,因為數量多了之後,就很難分清預留位置對應哪一個實參,所以pythonic的代碼是這樣的。
print‘hello %(name)s!’%(‘name’:’Tom’)value= {‘great’:’Hello world’,’language’:’python’}print‘%(greet)s from %(language)s.’%valueprint‘{greet} from {language}’.format(greet = ‘Helloworld!’,language = ‘python’)
建議2:編寫pythonic代碼
(1).要避免劣化代碼
1避免只用大小寫來區分不同的對象
2避免使用容易引起混淆的名稱
3不要害怕過長的變數名
(2).深入認識python有助於編寫pythonic代碼
1全面掌握python提供給我們的所有特性,包括語言特性和庫特性。其中最好的學習方式應該是通讀官方手冊中的LanguageReference和LibraryReference。
2隨之python版本的更新,知識也要更新。
3深入學習業界公認比較pythonic的代碼,比如Flask、gevent、requests等。
建議3:理解python與c語言的不同之處
(1).’縮排’與’{}’
python使用嚴格的代碼縮排方式分隔代碼塊,所以空格和tab鍵不能隨便敲了。
(2).’與 “
C語言中’和”是有嚴格區別的,在python中,單引號和雙引號,僅僅在輸入字串內容的時候,存在微小差異。
(3).三元操作符’?:’
c?x:y在python中等價的形式為xif c else y
(4).switch…case
python中沒有這樣的分支語句,但可以使用ifelif… else來替代。
或使用跳轉表來實現
def f(x): return{ 0:”youtyped zero.\n”, 1:”youare in top.\n”, 2:”nis an even number\n”}.get(n,”only single-digit numbers areallowed\n”)
不要唄其他語言的思維和習慣困擾,掌握python的哲學和思維方式才是硬道理。
建議4:在代碼中適當添加註釋、
python中有3種形式的代碼注釋:塊注釋、行注釋以及文檔注釋。這三種形式的慣用法大概有如下幾種:
(1).使用塊注釋僅僅注釋那些複雜的操作、演算法,還有可能別人難以理解的技巧或者不夠一目瞭然的代碼。
(2).注釋和代碼隔開一定的距離,同時在塊注釋之後最好多留幾行空白在寫代碼。
(3).給外部可訪問的函數和方法添加文檔注釋。注釋要清楚描述方法的功能,並對參數、返回值以及可能發生的異常進行說明,使得外部調用它的人員僅看docstring就能正常使用。
(4).推薦在檔案頭中包含copyright申明、模組描述等,如有必要可考慮加入作者資訊以及變更記錄。
建議5:通過適當添加空行使代碼布局更加優雅
在一個團隊中,保持良好的代碼格式需要團隊成員在選取一套合適的代碼格式規則的基礎上遵從和應用。往往代碼不斷修改,所有可讀性直接關係到可維護性和可擴充性。
(1).在一組代碼錶達完一個完整思路之後,應該用空白行進行間隔。
(2).盡量保持上下文語義的易理解性,如當一個函數調用另一個函數的時候,盡量將他們放在一起,最好調用者在上,被調用者在下。
(3).避免過長的程式碼,每行最好不要超過80個字元。超過的部分可以用括弧進行行串連,並保持元素垂直對齊。
(4).不要為了保持水平對齊而使用多餘的空格,使閱讀者更容易理解代碼更重要。
(5).空格的使用要能夠在需要強調的時候警示讀者,二元運算子左右兩邊應該有空格,逗號和分號前不要使用空格,函數名和左括弧之間、序列索引操作時序列名和[]之間不需要空格,函數預設的參數兩端不需要空格,強調前面的操作符時使用空格。
建議6:編寫函數的四個原則
函數能夠帶來最大化的代碼重用和最小化的代碼冗餘。一般函數設計有以下基本規則可以參考:
原則1函數設計要盡量短小,嵌套層次不宜過深。所謂短小,就是前面所提到的一樣盡量避免過長函數。
原則2函數申明應該做到合理、簡單、便於使用。除了函數名能反映其大體功能外,參數個數同樣不宜過多。
原則3函數參數設計應該考慮向下相容。有時候隨著需求和版本的升級,需要進行一定的修改才能滿足這個版本的需求,設計過程中除了著眼當前的需求還得考慮向下相容
原則4一個函數只做一件事,盡量保持函數語句粒度的一致性。
建議7:將常量集中到一個檔案
實際上python的內建命名空間是支援一小部分常量的,如我們熟悉的True、False、None等,如何使用常量呢?一般來說有兩種方式。
(1).通過命名風格來提醒使用者該變數代表的意義為常量,如常量名所有字母大寫,用底線串連各個單詞,如MAX_OVERFLOW、TOTAL。這是一種約定俗成的風格。
(2).通過自訂的類實現常量功能。這要求符合“命名全部為大寫”和“值一旦綁定便不可再修改”這兩個條件。下面是一種常見的解決方案,它通過對常量對應的值進行修改時或者命名不符合規範時拋出異常來滿足以上常量的兩個條件。
#const.pyclass_const: classConstError(typeError): pass classConstCaseError(ConstError): passdef __setattr__(self,name,value): if self.__dict__.has_key(name): raise self.ConstError,”Can’t change const %s”%name if not name.isupper(): raise self.ConsrCaseError,’const name “%s” is not all uppercase’%name self.__dict__[name]= valueimport syssys.modules[__name__]= _const()
使用時直接import const即可
import constconst.COMPANY= “IBM”
無論採用哪一種方式實現常量,都提倡將常量集中到一個檔案中,因為這樣有利於維護,一旦需要修改常量的值,可以集中統一進行而不是逐個檔案去檢查。
改善python程式的91個建議讀書筆記1