0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

常見的Pythonic寫法匯總

馬哥Linux運(yùn)維 ? 來源:未知 ? 作者:胡薇 ? 2018-10-19 15:03 ? 次閱讀

Python最大的優(yōu)點(diǎn)之一就是語(yǔ)法簡(jiǎn)潔,好的代碼就像偽代碼一樣,干凈、整潔、一目了然。要寫出 Pythonic(優(yōu)雅的、地道的、整潔的)代碼,需要多看多學(xué)大牛們寫的代碼,github 上有很多非常優(yōu)秀的源代碼值得閱讀,比如:requests、flask、tornado,下面列舉一些常見的Pythonic寫法。

0. 程序必須先讓人讀懂,然后才能讓計(jì)算機(jī)執(zhí)行。

“Programs must be written for people to read, and only incidentally for machines to execute.”

1. 交換賦值

##不推薦temp=aa=bb=a##推薦a,b=b,a#先生成一個(gè)元組(tuple)對(duì)象,然后unpack

2. Unpacking

##不推薦l=['David','Pythonista','+1-514-555-1234']first_name=l[0]last_name=l[1]phone_number=l[2]##推薦l=['David','Pythonista','+1-514-555-1234']first_name,last_name,phone_number=l#Python3Onlyfirst,*middle,last=another_list

3. 使用操作符in

##不推薦iffruit=="apple"orfruit=="orange"orfruit=="berry":#多次判斷##推薦iffruitin["apple","orange","berry"]:#使用in更加簡(jiǎn)潔

4. 字符串操作

##不推薦colors=['red','blue','green','yellow']result=''forsincolors:result+=s#每次賦值都丟棄以前的字符串對(duì)象,生成一個(gè)新對(duì)象##推薦colors=['red','blue','green','yellow']result=''.join(colors)#沒有額外的內(nèi)存分配

5. 字典鍵值列表

##不推薦forkeyinmy_dict.keys():#my_dict[key]...##推薦forkeyinmy_dict:#my_dict[key]...#只有當(dāng)循環(huán)中需要更改key值的情況下,我們需要使用my_dict.keys()#生成靜態(tài)的鍵值列表。

6. 字典鍵值判斷

##不推薦ifmy_dict.has_key(key):#...dosomethingwithd[key]##推薦ifkeyinmy_dict:#...dosomethingwithd[key]

7. 字典 get 和 setdefault 方法

##不推薦navs={}for(portfolio,equity,position)indata:ifportfolionotinnavs:navs[portfolio]=0navs[portfolio]+=position*prices[equity]##推薦navs={}for(portfolio,equity,position)indata:#使用get方法navs[portfolio]=navs.get(portfolio,0)+position*prices[equity]#或者使用setdefault方法navs.setdefault(portfolio,0)navs[portfolio]+=position*prices[equity]

8. 判斷真?zhèn)?/p>

##不推薦ifx==True:#....iflen(items)!=0:#...ifitems!=[]:#...##推薦ifx:#....ifitems:#...

9. 遍歷列表以及索引

##不推薦items='zeroonetwothree'.split()#method1i=0foriteminitems:printi,itemi+=1#method2foriinrange(len(items)):printi,items[i]##推薦items='zeroonetwothree'.split()fori,iteminenumerate(items):printi,item

10. 列表推導(dǎo)

##不推薦new_list=[]foritemina_list:ifcondition(item):new_list.append(fn(item))##推薦new_list=[fn(item)foritemina_listifcondition(item)]

11. 列表推導(dǎo)-嵌套

##不推薦forsub_listinnested_list:iflist_condition(sub_list):foriteminsub_list:ifitem_condition(item):#dosomething...##推薦gen=(itemforslinnested_listiflist_condition(sl)\foriteminslifitem_condition(item))foritemingen:#dosomething...

12. 循環(huán)嵌套

##不推薦forxinx_list:foryiny_list:forzinz_list:#dosomethingforx&y##推薦fromitertoolsimportproductforx,y,zinproduct(x_list,y_list,z_list):#dosomethingforx,y,z

13. 盡量使用生成器代替列表

##不推薦defmy_range(n):i=0result=[]whilei

14. 中間結(jié)果盡量使用imap/ifilter代替map/filter

##不推薦reduce(rf,filter(ff,map(mf,a_list)))##推薦fromitertoolsimportifilter,imapreduce(rf,ifilter(ff,imap(mf,a_list)))*lazyevaluation會(huì)帶來更高的內(nèi)存使用效率,特別是當(dāng)處理大數(shù)據(jù)操作的時(shí)候。

15. 使用any/all函數(shù)

##不推薦found=Falseforitemina_list:ifcondition(item):found=Truebreakiffound:#dosomethingiffound...##推薦ifany(condition(item)foritemina_list):#dosomethingiffound...

16. 屬性(property)

=

##不推薦classClock(object):def__init__(self):self.__hour=1defsetHour(self,hour):if25>hour>0:self.__hour=hourelse:raiseBadHourExceptiondefgetHour(self):returnself.__hour##推薦classClock(object):def__init__(self):self.__hour=1def__setHour(self,hour):if25>hour>0:self.__hour=hourelse:raiseBadHourExceptiondef__getHour(self):returnself.__hourhour=property(__getHour,__setHour)

17. 使用 with 處理文件打開

##不推薦f=open("some_file.txt")try:data=f.read()#其他文件操作..finally:f.close()##推薦withopen("some_file.txt")asf:data=f.read()#其他文件操作...

18. 使用 with 忽視異常(僅限Python 3)

##不推薦try:os.remove("somefile.txt")exceptOSError:pass##推薦fromcontextlibimportignored#Python3onlywithignored(OSError):os.remove("somefile.txt")

19. 使用 with 處理加鎖

##不推薦importthreadinglock=threading.Lock()lock.acquire()try:#互斥操作...finally:lock.release()##推薦importthreadinglock=threading.Lock()withlock:#互斥操作...

20. 參考

1) Idiomatic Python:http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

2) PEP 8: Style Guide for Python Code:http://www.python.org/dev/peps/pep-0008/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3643

    瀏覽量

    94120
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85119

原文標(biāo)題:符合語(yǔ)言習(xí)慣的 Python 優(yōu)雅編程技巧

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    最新!智慧燈桿八大應(yīng)用場(chǎng)景案例獨(dú)家匯總

    最新!智慧燈桿八大應(yīng)用場(chǎng)景案例獨(dú)家匯總
    的頭像 發(fā)表于 01-14 12:47 ?170次閱讀
    最新!智慧燈桿八大應(yīng)用場(chǎng)景案例獨(dú)家<b class='flag-5'>匯總</b>

    最新!智慧燈桿在水域中的應(yīng)用案例匯總(建議收藏)

    最新!智慧燈桿在水域中的應(yīng)用案例匯總(建議收藏)
    的頭像 發(fā)表于 01-07 10:28 ?133次閱讀
    最新!智慧燈桿在水域中的應(yīng)用案例<b class='flag-5'>匯總</b>(建議收藏)

    常見的容器云服務(wù)引擎有哪些?

    常見的容器云服務(wù)引擎有哪些?云服務(wù)引擎涵蓋數(shù)據(jù)庫(kù)、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理、數(shù)據(jù)分析、容器云、機(jī)器學(xué)習(xí)及數(shù)據(jù)集成等多個(gè)領(lǐng)域,提供一站式解決方案。云服務(wù)引擎是云計(jì)算領(lǐng)域的重要組成部分,它們提供了各種服務(wù)來幫助用戶構(gòu)建、部署和管理應(yīng)用程序。以下是UU云小編匯總的一些
    的頭像 發(fā)表于 01-07 09:49 ?104次閱讀

    研華工控機(jī)底板常見型號(hào)匯總

    在工業(yè)控制領(lǐng)域,研華作為知名品牌,其工控機(jī)底板種類繁多,每一款都具備獨(dú)特的特性與優(yōu)勢(shì),以滿足不同工業(yè)場(chǎng)景的多樣化需求。以下是對(duì)研華工控機(jī)底板部分常見型號(hào)的詳細(xì)匯總及性能參數(shù)介紹:
    的頭像 發(fā)表于 12-14 10:14 ?296次閱讀
    研華工控機(jī)底板<b class='flag-5'>常見</b>型號(hào)<b class='flag-5'>匯總</b>

    案例賞析 近期23個(gè)智慧路燈燈桿落地案例匯總!

    『案例賞析』近期23個(gè)智慧路燈燈桿落地案例匯總!
    的頭像 發(fā)表于 11-13 11:10 ?355次閱讀
    案例賞析 近期23個(gè)智慧路燈燈桿落地案例<b class='flag-5'>匯總</b>!

    C語(yǔ)言中最常見的宏定義寫法

    如果讓你用C語(yǔ)言寫個(gè)宏定義,我相信大部分同學(xué)順手就能寫出define。
    的頭像 發(fā)表于 10-28 11:12 ?404次閱讀

    TMS320C6452功耗匯總

    電子發(fā)燒友網(wǎng)站提供《TMS320C6452功耗匯總.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 11:44 ?0次下載
    TMS320C6452功耗<b class='flag-5'>匯總</b>

    OMAP-L137功耗匯總

    電子發(fā)燒友網(wǎng)站提供《OMAP-L137功耗匯總.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 09:28 ?0次下載
    OMAP-L137功耗<b class='flag-5'>匯總</b>

    常見的服務(wù)器容器和漏洞類型匯總

    常見的服務(wù)器容器包括KubeSphere、Tomcat、Nginx、Apache等,它們?cè)谔峁┍憬莸姆?wù)部署和靈活的網(wǎng)絡(luò)功能的同時(shí),也可能存在著一定的安全風(fēng)險(xiǎn)。這些容器的漏洞可能導(dǎo)致數(shù)據(jù)泄露、權(quán)限被非授權(quán)訪問甚至系統(tǒng)被完全控制。具體的常見服務(wù)器容器漏洞包括解析漏洞、SSR
    的頭像 發(fā)表于 08-29 10:39 ?309次閱讀

    逆變器常見問題匯總#逆變電源

    逆變器
    深圳市寶威特電源有限公司
    發(fā)布于 :2024年06月26日 09:30:41

    SMT貼片常見不良現(xiàn)象分析匯總

    在我們加工制造產(chǎn)品的過程中,電路板貼片總會(huì)遇到一些問題,我們咨詢了深圳佳金源工業(yè)科技有限公司的技術(shù)人員,對(duì)問題進(jìn)行了整理匯總,便于大家學(xué)習(xí)了解。在SMT貼片生產(chǎn)過程中時(shí)有發(fā)生焊接不良現(xiàn)象,常見
    的頭像 發(fā)表于 06-06 16:41 ?982次閱讀
    SMT貼片<b class='flag-5'>常見</b>不良現(xiàn)象分析<b class='flag-5'>匯總</b>

    請(qǐng)問handle的寫法

    遇到一行代碼 YDLidar *laser = lidarCreate(); //Create a handle to this Lidar. 請(qǐng)問這行代碼是什么意思,句柄的寫法怎么是這樣的呀
    發(fā)表于 05-18 10:42

    在官方庫(kù)中發(fā)現(xiàn)GPIOx-&gt;ODR這種寫法,是什么意思,怎么中間會(huì)有-&gt;?

    本人新手,剛接觸st的芯片 在官方庫(kù)中發(fā)現(xiàn)GPIOx->ODR這種寫法,不知道這是什么意思,怎么中間會(huì)有->? 請(qǐng)論壇上高手予以幫忙解答
    發(fā)表于 05-10 06:48

    國(guó)產(chǎn)riscv芯片大匯總?

    請(qǐng)問有統(tǒng)計(jì)國(guó)產(chǎn)的riscv芯片的嗎?能匯總一下嗎?
    發(fā)表于 04-27 11:53

    Cadence17.4使用問題匯總

    電子發(fā)燒友網(wǎng)站提供《Cadence17.4使用問題匯總.docx》資料免費(fèi)下載
    發(fā)表于 03-07 16:33 ?2次下載

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品