国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Python領域最偉大工程師Kenneth Reitz,教你寫代碼

了解K神( kennethreitz)是從它牛逼的requests庫開始,號稱最頂尖的Python程序員之一。大神有很多作品,而且還有一個非常勵志的傳奇故事,從一個胖胖的不修邊幅的碼農(nóng),勵志減肥而變成一個愛攝影玩音樂的,有藝術家氣息程序員。今天我們一起來拜讀一下大神關于寫Python代碼的建議!

一.Mutable and immutable types

Python有兩種內(nèi)置或用戶定義的類型。

  • 可變類型是允許就地修改內(nèi)容的類型。典型的可變列表是列表和詞典:所有列表都有變異方法,如 list.append()或list.pop(),并且可以在適當?shù)奈恢眠M行修改。詞典也是如此。
  • 不可變類型不提供改變其內(nèi)容的方法。例如,設置為整數(shù)6的變量x沒有“增量”方法。如果要計算x + 1,則必須創(chuàng)建另一個整數(shù)并為其指定名稱。

體會一下這Best這招,選擇是使用map函數(shù),它可以將內(nèi)置函數(shù)類型str映射到迭代器range。這會生成一個map對象,然后就可以像其他示例一樣join。在某些情況下,map函數(shù)甚至可能比列表理解更快,更簡潔!

二.One statement per line

每一行一個語句,尤其在復雜的邏輯表達式的時候,這樣會清晰很容易閱讀。

雖然列表推導等一些復合語句因其簡潔性和表達性而被允許和贊賞,但在同一行代碼上有兩個脫節(jié)語句是不好的做法

三.Explicit code

Python因為技巧性非常高,有的時候濫用一些黑魔法,過度的使用技巧而反而失去了代碼本身的直觀性。

字典的更新有幾種方法,dict(**locals)本意是想生成一個新的字典返回。在上面的好代碼中,顯式地從調(diào)用者接收x和y,并返回顯式字典。使用此函數(shù)的開發(fā)人員通過讀取第一行和最后一行就能確切地知道要做什么,而不是像壞例子的那種情況,比較晦澀難懂,不直接。

四.Returning values

關于返回值的處理

當函數(shù)的復雜性增加時,在函數(shù)體內(nèi)使用多個return語句并不罕見。但是,為了保持清晰的意圖和可持續(xù)的可讀性水平,最好避免從體內(nèi)的許多輸出點返回有意義的值。

在函數(shù)中返回值有兩種主要情況:函數(shù)在正常處理時返回的結(jié)果,以及指示錯誤輸入?yún)?shù)的錯誤情況或函數(shù)無法完成其計算的任何其他原因或任務

def complex_function(a, b, c): if not a: return None # Raising an exception might be better if not b: return None # Raising an exception might be better # Some complex code trying to compute x from a, b and c # Resist temptation to return x if succeeded if not x: # Some Plan-B computation of x return x # One single exit point for the returned value x will help # when maintaining the code.

當一個函數(shù)在其正常過程中有多個主要出口時,調(diào)試返回的結(jié)果變得很困難,因此最好保留一個退出點。這也將有助于分解一些代碼路徑,如果函數(shù)有多個出口點,說明你的代碼要進一步的重構(gòu)。

五.Unpacking

如果知道列表或元組的長度,則可以通過解壓縮為其元素指定名稱。比如enumerate()將為列表中的每個項提供兩個元素的元組,一個下標一個值:

for index, item in enumerate(some_list): # do something with index and item

也可以使用它來交換變量:

a, b = b, a

嵌套解包也適用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

六.Searching for an item in a collection

有時我們需要搜索一系列的東西。讓我們看看兩個選項:列表和集合。

以下面的代碼為例:

s = set([ s , p , a , m ])l = [ s , p , a , m ]def lookup_set(s): return s in sdef lookup_list(l): return s in l
  • 即使兩個函數(shù)看起來都相同,因為lookup_set利用了Python中的集合是哈希表的事實,兩者之間的查找性能是非常不同的。
  • 要確定項目是否在列表中,Python必須遍歷每個項目,直到找到匹配的項目。
  • 這很費時,特別是對于長列表。另一方面,在集合中項目的哈希將告訴Python在集合中的哪個位置尋找匹配項目。因此,即使集合很大,也可以快速完成搜索

七.Check if variable equals a constan

檢查變量是否等于常數(shù)

您不需要顯式地將值與True或None或空進行比較 - 您只需將其添加到if語句即可。

八.Access a Dictionary Element

訪問字典元素

不要使用該dict.has_key()方法。相反使用語法或傳遞默認參數(shù) 比如x in dict ,dict.get(k,default_value)

九.Filtering a list

過濾列表壞的做法,或者初學者經(jīng)常會犯的錯誤。

好的做法是使用filter函數(shù),從Python 3.0開始,該filter()函數(shù)返回迭代器而不是列表。如果你真的需要一個列表,前面加一個list()即可!

十.Read From a File

使用語法從文件中讀取,這將自動為您關閉文件,一定要用with open

十一.Line Continuations

代碼長度的持續(xù)

  • 當我們的邏輯代碼行長于可接受的限制時(PEP8規(guī)定是79個字符),需要將其拆分為多個物理行。
  • 如果行的最后一個字符是反斜杠,Python解釋器將連接連續(xù)的行。這在某些情況下很有用,但通常應該避免因為它的脆弱性。
  • 在反斜杠之后添加到行尾的空格會破壞代碼并可能產(chǎn)生意外結(jié)果。

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:

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)

更好的做法是在元素周圍使用括號。在行尾留下一個未閉合的括號,Python解釋器將加入下一行,直到括號被關閉。對于大括號和方括號,同樣的行為也適用。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python基礎語法14個知識點大串講
如果只有1小時學Python,看這篇就夠了
4個使閱讀 Python 代碼更容易的函數(shù)
如何優(yōu)雅高效地使用Python——這些Python技巧你必須學會!
收藏!20條非常實用的Python代碼實例
Python 與 Javascript 之比較
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服