久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > Python 新手的五大坑

        Python 新手的五大坑

        來源:千鋒教育
        發(fā)布人:xqq
        時間: 2023-11-06 17:42:18 1699263738

        對于Python新手來說,寫代碼很少考慮代碼的效率和簡潔性,因此容易造成代碼冗長、執(zhí)行慢,這些都是需要改進(jìn)的地方。本文是想通過幾個案列給新手一點(diǎn)啟發(fā),怎樣寫python代碼更優(yōu)雅。

        01.不喜歡使用高級數(shù)據(jù)結(jié)構(gòu)

        sets(集合)

        很多新手忽視sets(集合)和tuple(元組)的強(qiáng)大之處.

        例如,取兩個列表交集:

        defcommon_elements(list1,list2):

        common=[]

        foritem1inlist1:

        ifitem1inlist2:

        common.append(item1)、

        returncommon

        這樣寫會更好:

        defcommon_elements(list1,list2):

        common=set(list1).intersection(set(list2))

        returnlist(common)

        dic(字典)

        新手枚舉(訪問和取出)字典的鍵和對應(yīng)值,認(rèn)為對應(yīng)值必須通過鍵來訪問,往往會這樣做:

        my_dict={'a':1,'b':2}

        forkeyinmy_dict:

        print(key,my_dict[key])

        有一個更優(yōu)雅的方法可以實現(xiàn):

        my_dict={'a':1,'b':2}

        forkey,valueinmy_dict.items():

        print(key,value)

        對大部分項目來說,這樣寫會更加有效率。

        tuple(元組)

        元組一旦創(chuàng)建就無法更改元素,看似沒有什么用處,其實元組的作用大著呢!很多函數(shù)方法都會返回元組,比如enumerate()和dict.items(),并且可以在函數(shù)中使用元組,返回多個值。還能夠很方便地從元組中提取信息:

        a,b=('cat','dog')

        上面元組中有兩個元素,分別被賦給a,b。如果有多個值,同樣可以提?。?/p>

        a,b,c=('cat','dog','tiger')

        print(a,b,c)

        提取首、尾兩個元素:

        first,*_,end=(1,2,3,4,5,6)

        print(first,end)

        #輸出:1、6

        提取首、中、尾三部分:

        first,*middle,end=(1,2,3,4,5,6)

        print(first,middle,end)

        #輸出:1、[2,3,4,5]、6

        元組還可以用來交換變量:

        (a,b,c)=(c,a,b)

        上面a變成之前的c,b變成之前的a,c變成之前的b。元組也能作為字典的鍵,所以如果你需要存儲數(shù)據(jù),可以使用帶有元組鍵的字典,比如說經(jīng)緯度數(shù)據(jù)。

        02.不喜歡使用上下文管理器

        新手可能會習(xí)慣這樣進(jìn)行讀取文件操作:

        ifos.path.exists(data_file_path):

        data_file=open(data_file_path,'r')

        else:

        raiseOSERROR

        print(data_file.read())

        data.close()

        這樣寫會有幾個明顯的問題:

        ·可能出現(xiàn)文件存在,但文件被占用,無法讀取的情況

        ·可能出現(xiàn)文件可以被讀取,但操作文件對象出現(xiàn)報錯的情況

        ·可能出現(xiàn)忘記關(guān)閉文件的情況

        如果使用with…語句,問題就迎刃而解了:

        withopen(data_file_path,'r')asdata_file:

        print(data_file.read)

        這樣可以捕獲任何打開文件或處理數(shù)據(jù)時的異常情況,并且在任務(wù)處理完后自動關(guān)閉文件。

        python初學(xué)者可能不太了解上下文管理器的神奇之處,它真的能帶來巨大的便利。

        03.不喜歡使用標(biāo)準(zhǔn)庫

        標(biāo)準(zhǔn)庫itertools和collections仍然很少被初學(xué)者使用

        itertools

        如果你看到下面的任務(wù):

        list1=range(1,10)

        list2=range(10,20)

        foritem1inlist1:

        foritem2inlist1:

        print(item1*item2)

        這是一個嵌套循環(huán)操作,為提高代碼效率,完全可以用product()函數(shù)替代嵌套循環(huán):

        fromitertoolsimportproduct

        list1=range(1,10)

        list2=range(10,20)

        foritem1,item2inproduct(list1,list2):

        print(item1*item2)

        這兩段代碼的結(jié)果完全一樣,但使用標(biāo)準(zhǔn)庫函數(shù)明顯更加簡潔高效。itertools還有很多方便操作迭代對象的函數(shù),比如:

        ·count()函數(shù)會創(chuàng)建一個無限迭代器

        ·cycle()函數(shù)會把傳入的序列無限重復(fù)下去

        ·chain()可以把多個迭代對象串聯(lián)起來

        ·group()函數(shù)可以把迭代其中相鄰的重復(fù)元素挑出來,放在一起

        有興趣可以詳細(xì)看看itertools庫的各種神奇函數(shù)。

        collections

        新手對python集合模塊了解的可能并不多,你可能會遇到這樣的情形:

        consolidated_list=[('a',1),('b',2),('c',3),('b',4)]

        items_by_id={}

        forid_,iteminconsolidated_list:

        ifid_notinitems_by_id:

        items_by_id[id_]=[]

        ifid_initems_by_id:

        items_by_id[id_].append(item)

        上面代碼構(gòu)建了一個字典,依次向字典中添加信息,如果某個鍵已經(jīng)存在,則以某種方式修改該鍵的值;如果某個鍵不存在,則添加對應(yīng)鍵值對。

        這種算法非常常見,你可以用collects模塊的defaultdict()函數(shù)來實現(xiàn)同樣效果:

        fromcollectionsimportdefaultdict

        items_by_id=defaultdict(list)

        consolidated_list=[('a',1),('b',2),('c',3),('b',4)]

        forid_,iteminconsolidated_list:

        items_by_id[id_].append(item)

        在此列中,defaultdict()接受一個list作為參數(shù),當(dāng)鍵不存在時,則返回一個空列表作為對應(yīng)值。

        有時候我們會遇到統(tǒng)計詞頻的案例,比如:

        #統(tǒng)計詞頻

        colors=['red','blue','red','green','blue','blue']

        result={}

        forcolorincolors:

        ifresult.get(color)==None:

        result[color]=1

        else:

        result[color]+=1

        print(result)

        #輸出{'red':2,'blue':3,'green':1}

        完全可以用defaultdict()函數(shù)實現(xiàn)上面的計數(shù)功能:

        colors=['red','blue','red','green','blue','blue']

        d=defaultdict(int)

        forcolorincolors:

        d[color]+=1

        print(d)

        更簡單的方法用collections模塊的Counter()函數(shù):

        fromcollectionsimportCounter

        colors=['red','blue','red','green','blue','blue']

        c=Counter(colors)

        print(dict(c))

        對于備份文件,新人往往會用system模塊:

        fromosimportsystem

        system("xcopye:\\sample.csve:\\newfile\\")

        其實shutil模塊更好用:

        importshutil

        shutil.copyfile('E:\\q.csv','e:\\movie\\q.csv')

        因為shutil會很詳細(xì)地報告錯誤和異常。

        04.不喜歡使用異常處理

        無論老手新手都應(yīng)該在寫代碼的時候進(jìn)行異常處理操作,這樣可以使代碼更加健壯。異常處理一般會用try…except語句。

        05.:不喜歡使用生成器

        除非你的list十分復(fù)雜,并且頻繁調(diào)用,否則都建議使用生成器,因為它非常節(jié)省內(nèi)存,舉個例子:

        defpowers_of_two(max=20000):

        i=0

        powers=[]

        while2**i

        powers.append[2**i]

        i+=1

        returnpowers

        對于使用次數(shù)少、占據(jù)大量內(nèi)存、且容易生成的數(shù)據(jù),可以用生成器替代列表存儲:

        fromitertoolsimportcount,takewhile

        defpowers_of_two(max=20000):

        forindexintakewhile(lambdai:2**i

        yield2**index

        以上內(nèi)容為大家介紹了Python新手的五大坑,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.2667701.com/

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        远安县| 台州市| 衡东县| 靖西县| 无极县| 海兴县| 山东| 论坛| 西宁市| 平安县| 濮阳市| 卫辉市| 资兴市| 临沭县| 永昌县| 涪陵区| 棋牌| 铜川市| 新绛县| 萝北县| 新泰市| 青河县| 旅游| 酉阳| 馆陶县| 塔河县| 海阳市| 福安市| 梅州市| 东乌| 屯留县| 区。| 茂名市| 双辽市| 华容县| 吉木乃县| 鹿邑县| 禹城市| 宁波市| 芜湖县| 化隆|