久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

全面解析編寫高質(zhì)量Python代碼的25個(gè)有效方法,!代碼是給人看的!

 flyk0tcfb46p9f 2018-04-11

常說(shuō),,見字如見人,。那么程序員也同樣如此,第一反應(yīng)程序員的就是他的代碼是否美觀,。畢竟代碼不僅是要實(shí)現(xiàn)東西,,更重要的是給領(lǐng)導(dǎo)看的,如果代碼一踏糊涂,就是技術(shù)在過(guò)硬也就那樣,,作為領(lǐng)導(dǎo)者會(huì)認(rèn)為你工作不嚴(yán)謹(jǐn),。就比如一筆好字,給人感覺(jué)是完全不同的,,在面試的時(shí)候也是非常重要的,,代碼寫的規(guī)范美觀,HR會(huì)在無(wú)形之中給你加分的,!

第 1 章 用 Pythonic 方式來(lái)思考

第 5 條:了解切割序列的方法

1.不要寫多余的代碼:當(dāng) start 索引為 0,,或 end 索引為序列長(zhǎng)度時(shí),應(yīng)該將其省略,。

  1. 切片操作不會(huì)計(jì)較 start 與 end 索引是否越界(如 a[:20] 或 a[-20:]),。

3.對(duì) list 賦值的時(shí)候,如果使用切片操作,,就會(huì)把原列表中處在相關(guān)范圍內(nèi)的值替

換成新值,,即便它們的長(zhǎng)度不同也依然可以替換

第 8 條:不要使用兩個(gè)以上的表達(dá)式的列表推導(dǎo)

列表推導(dǎo)支持多級(jí)循環(huán),每一級(jí)循環(huán)也支持多項(xiàng)條件,。超過(guò)兩個(gè)表達(dá)式的列表推導(dǎo)是很難理解的,,應(yīng)該盡量避免。

可以使用兩個(gè)條件,、兩個(gè)循環(huán)或

一個(gè)條件搭配一個(gè)循環(huán),。如果要寫的代碼比這還復(fù)雜,那就應(yīng)該使用普通的 if 和 for 語(yǔ)句,,并編寫輔助函數(shù),。

第 9 條:用生成器表達(dá)式來(lái)改寫數(shù)據(jù)量較大的列表推導(dǎo)

當(dāng)輸入的數(shù)據(jù)量較大時(shí),列表推導(dǎo)可能會(huì)因?yàn)檎加锰鄡?nèi)存而出問(wèn)題,。為了解決這個(gè)問(wèn)題,,Python 提供了生成器表達(dá)式(generator expression),它是對(duì)列表

推導(dǎo)和生成器的一種泛化(generalization),。

把實(shí)現(xiàn)列表推導(dǎo)所用的那種寫法放在一對(duì)圓括號(hào)中,,就構(gòu)成了生成器表達(dá)式。此時(shí)立刻返回一個(gè)迭代器,,逐次調(diào)用內(nèi)置的 next 函數(shù),,以這個(gè)迭代器為參數(shù),,輸出一個(gè)值,,做循環(huán)輸出即可。

3.11

第 11 條:用 zip 函數(shù)同時(shí)遍歷兩個(gè)迭代器

  1. 內(nèi)置的 zip 函數(shù)里可以平行的同時(shí)遍歷兩個(gè)迭代器,,如果長(zhǎng)度不一樣則會(huì)以較短的迭代器為準(zhǔn)而結(jié)束循環(huán),。

  2. python 3 中的 zip 函數(shù)相當(dāng)于生成器,可以逐次產(chǎn)生元組,。

  3. python 2 則時(shí)一次性生成返回整份列表,;如果用 zip 函數(shù)遍歷的數(shù)據(jù)比較多,,則會(huì)導(dǎo)致程序崩潰,需要用itertools內(nèi)置模塊的 izip 函數(shù)

第 12 條:不要在 for 和 while 循環(huán)后面寫 else 模塊

結(jié)果:

第 2 章 函數(shù)

第 14 條:盡量用異常來(lái)表示特殊情況,,而不要返回 None

第 17 條:在參數(shù)上面迭代時(shí),,要多加小心

迭代器只能欸遍歷一次,如果多次遍歷則會(huì)出現(xiàn)意想不到的錯(cuò)誤,。

(列表可以被多次迭代)

  1. 為解決迭代器不可多次遍歷,,可以使用迭代器制作一份列表,缺點(diǎn)在于列表的數(shù)據(jù)量大的話,,會(huì)造成程序崩潰,;

  2. ① 可以使用 lambda 表達(dá)式代替,該表達(dá)式在調(diào)用生成器的時(shí)候,,可以每次產(chǎn)生新的迭代器,;(略顯生硬)

    ② 新編一種實(shí)現(xiàn)迭代器協(xié)議的容器類。(建議使用)

第 20 條:用 None 和文檔字符串來(lái)描述具有動(dòng)態(tài)默認(rèn)值的參數(shù)

如果參數(shù)的實(shí)際默認(rèn)值是可變類型(mutable),,那就一定要記得用 None 作為形式

上的默認(rèn)值,。(即形參值設(shè)為 None)

第 22 條:盡量用輔助類來(lái)維護(hù)程序的狀態(tài),而不要用字典和元組

  1. 我們很容易就能用 Python 內(nèi)置的字典與元組類型構(gòu)建出分層的數(shù)據(jù)結(jié)構(gòu),,從而保存程序的內(nèi)部狀態(tài),。

    但是,當(dāng)前套多于一層的時(shí)候,,就應(yīng)該避免使用這種做法了(例如,,不要使用包含字典的字典,不要使用過(guò)長(zhǎng)的元組)

  2. 如果容器中包含簡(jiǎn)單而又不可變的數(shù)據(jù),,可以使用namedtuple來(lái)表示

  3. 保存內(nèi)部狀態(tài)的字典如果變得比較復(fù)雜,,那就應(yīng)該把這些代碼拆解為多個(gè)輔助類。(建議使用)

第 25 條:用 super 初始化父類

  1. 直接在子類中調(diào)用超類的init方法,,可能會(huì)產(chǎn)生無(wú)法預(yù)知的行為,,問(wèn)題之一就是一個(gè)類繼承多個(gè)類,全部調(diào)用超類的init方法,,實(shí)際調(diào)用順序并不固定,。

  2. 鉆石行繼承體系:如果子類繼承自兩個(gè)單獨(dú)的超類,而那兩個(gè)超類有繼承自同一個(gè)公共基類,,那么就構(gòu)成了鉆石行繼承體系,。

3.總是應(yīng)該使用內(nèi)置的 super 函數(shù)來(lái)初始化父類。

謝謝閱讀,!你有從中學(xué)到東西嘛,?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多