了解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農(nóng),勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關于寫Python代碼的建議!
Python有兩種內(nèi)置或用戶定義的類型。
體會一下這Best這招,選擇是使用map函數(shù),它可以將內(nèi)置函數(shù)類型str映射到迭代器range。這會生成一個map對象,然后就可以像其他示例一樣join。在某些情況下,map函數(shù)甚至可能比列表理解更快,更簡潔!
每一行一個語句,尤其在復雜的邏輯表達式的時候,這樣會清晰很容易閱讀。
雖然列表推導等一些復合語句因其簡潔性和表達性而被允許和贊賞,但在同一行代碼上有兩個脫節(jié)語句是不好的做法
Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。
字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調(diào)用者接收x和y,并返回顯式字典。使用此函數(shù)的開發(fā)人員通過讀取第一行和最后一行就能確切地知道要做什么,而不是像壞例子的那種情況,比較晦澀難懂,不直接。
關于返回值的處理
當函數(shù)的復雜性增加時,在函數(shù)體內(nèi)使用多個return語句并不罕見。但是,為了保持清晰的意圖和可持續(xù)的可讀性水平,最好避免從體內(nèi)的許多輸出點返回有意義的值。
在函數(shù)中返回值有兩種主要情況:函數(shù)在正常處理時返回的結(jié)果,以及指示錯誤輸入?yún)?shù)的錯誤情況或函數(shù)無法完成其計算的任何其他原因或任務
當一個函數(shù)在其正常過程中有多個主要出口時,調(diào)試返回的結(jié)果變得很困難,因此最好保留一個退出點。這也將有助于分解一些代碼路徑,如果函數(shù)有多個出口點,說明你的代碼要進一步的重構(gòu)。
如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:
for index, item in enumerate(some_list): # do something with index and item
也可以使用它來交換變量:
嵌套解包也適用Py3.x:
a, (b, c) = 1, (2, 3)a, *rest = [1, 2, 3]# a = 1, rest = [2, 3]a, *middle, c = [1, 2, 3, 4]# a = 1, middle = [2, 3], c = 4
有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。
以下面的代碼為例:
檢查變量是否等于常數(shù)
您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。
訪問字典元素
不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數(shù) 比如x in dict ,dict.get(k,default_value)
過濾列表壞的做法,或者初學者經(jīng)常會犯的錯誤。
好的做法是使用filter函數(shù),從Python 3.0開始,該filter()函數(shù)返回迭代器而不是列表。如果你真的需要一個列表,前面加一個list()即可!
使用語法從文件中讀取,這將自動為您關閉文件,一定要用with open
代碼長度的持續(xù)
Bad:
my_very_big_string = '''For a long time I used to go to bed early. Sometimes, when I had put out my candle, my eyes would close so quickly that I had not even time to say “I’m going to sleep.”'''from some.deep.module.inside.a.module import a_nice_function, another_nice_function, yet_another_nice_function
Good:
更好的做法是在元素周圍使用括號。在行尾留下一個未閉合的括號,Python解釋器將加入下一行,直到括號被關閉。對于大括號和方括號,同樣的行為也適用。