Effective Python:編寫高質(zhì)量的Python代碼的59個(gè)有效方法(10-12)

  • 第十條:盡量用enumerate取代range
    迭代時(shí),兩種方法:
    1.range
    在一系列整數(shù)上迭代時(shí),內(nèi)置的range函數(shù)很有用。如果想要獲取索引時(shí),較為復(fù)雜,代碼繁瑣且不易理解
    2.enumerate
    python內(nèi)置函數(shù),可以為此函數(shù)提供第二個(gè)參數(shù),以指定開始計(jì)數(shù)時(shí)所用的值(默認(rèn)為0)推薦用此。
    舉個(gè)栗子,對(duì)比一目了然:


    圖片.png

  • 第十一條:用zip函數(shù)同時(shí)遍歷兩個(gè)迭代器
    舉個(gè)栗子:


    圖片.png

    通過比較,可以得出:
    (1)zip函數(shù)較為簡(jiǎn)潔易懂,zip可以平行的遍歷多個(gè)迭代器
    (2)問題:
    <1>在python2中,zip函數(shù)不是生成器,而是會(huì)把開發(fā)者提供的迭代器,都平行遍歷一次,在此過程中,他會(huì)把迭代器所產(chǎn)生的值匯聚成元組,并把那些元組所構(gòu)成的列表完整的返回給調(diào)用者。---這樣會(huì)產(chǎn)生大量?jī)?nèi)存,導(dǎo)致程序崩潰。
    所以,在python2中想要遍歷非常大的迭代器,應(yīng)該使用itertools內(nèi)置模塊的izip函數(shù)。
    (2)如果提供的迭代器長(zhǎng)度不等,那么zip就會(huì)自動(dòng)提前終止。舉個(gè)栗子:


    圖片.png

    解決辦法:itertools內(nèi)置模塊zip_longest函數(shù),他可以平行的遍歷多個(gè)迭代器,而不用在乎他們的長(zhǎng)度是否相等。

  • 第十二條:不要在for和while循環(huán)后面寫else塊
    Python 提供了一種獨(dú)特的功能,即可以在循環(huán)內(nèi)部的語句塊后面直接編寫else塊。
    (1)if/else:else意思是如果不執(zhí)行if,則else;反之亦然。try/except同理
    (2)try/except/else:else意思是:如果前面的try塊沒有失敗,那就執(zhí)行else塊。
    try/finally同樣,finally意思是執(zhí)行過前面的try之后,總是執(zhí)行finally.
    (3)for/else:只有當(dāng)整個(gè)循環(huán)主體都沒遇到break語句時(shí),循環(huán)后面的else才會(huì)執(zhí)行。
    (4)不要在循環(huán)后面使用else塊,因?yàn)檫@種寫法既不直觀,又容易引人誤解。
    舉個(gè)栗子:


    圖片.png

    我們不要這樣寫,而應(yīng)該:


    圖片.png

    或者:
    圖片.png

注意:盡量不要在這種循環(huán)后面寫else語句,不要給自己挖坑


好了,本回依舊是學(xué)習(xí)三條。
說明:沒回存在的問題會(huì)在整本書都學(xué)完之后再做分析與補(bǔ)充。
天氣雖然炎熱,依舊要靜心學(xué)習(xí),每周進(jìn)步一點(diǎn)點(diǎn),加油
ps:在編寫第十條的冰淇淋口味的例子時(shí),自己默默的咽了好幾次口水,冰激凌對(duì)我真的是太有誘惑力了(尷尬hhhh)
因?yàn)檫@本書是kevin師兄推薦我看的,以此記錄學(xué)習(xí)過程也是表示對(duì)師兄的感謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容