0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的Pythonic写法汇总

马哥Linux运维 来源:未知 作者:胡薇 2018-10-19 15:03 次阅读

Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。

0. 程序必须先让人读懂,然后才能让计算机执行。

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

1. 交换赋值

##不推荐temp=aa=bb=a##推荐a,b=b,a#先生成一个元组(tuple)对象,然后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更加简洁

4. 字符串操作

##不推荐colors=['red','blue','green','yellow']result=''forsincolors:result+=s#每次赋值都丢弃以前的字符串对象,生成一个新对象##推荐colors=['red','blue','green','yellow']result=''.join(colors)#没有额外的内存分配

5. 字典键值列表

##不推荐forkeyinmy_dict.keys():#my_dict[key]...##推荐forkeyinmy_dict:#my_dict[key]...#只有当循环中需要更改key值的情况下,我们需要使用my_dict.keys()#生成静态的键值列表。

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. 判断真伪

##不推荐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. 列表推导

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

11. 列表推导-嵌套

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

12. 循环嵌套

##不推荐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. 中间结果尽量使用imap/ifilter代替map/filter

##不推荐reduce(rf,filter(ff,map(mf,a_list)))##推荐fromitertoolsimportifilter,imapreduce(rf,ifilter(ff,imap(mf,a_list)))*lazyevaluation会带来更高的内存使用效率,特别是当处理大数据操作的时候。

15. 使用any/all函数

##不推荐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/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3609

    浏览量

    93680
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84614

原文标题:符合语言习惯的 Python 优雅编程技巧

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    研华工控机底板常见型号汇总

    在工业控制领域,研华作为知名品牌,其工控机底板种类繁多,每一款都具备独特的特性与优势,以满足不同工业场景的多样化需求。以下是对研华工控机底板部分常见型号的详细汇总及性能参数介绍:
    的头像 发表于 12-14 10:14 72次阅读
    研华工控机底板<b class='flag-5'>常见</b>型号<b class='flag-5'>汇总</b>

    案例赏析 近期23个智慧路灯灯杆落地案例汇总!

    『案例赏析』近期23个智慧路灯灯杆落地案例汇总!
    的头像 发表于 11-13 11:10 194次阅读
    案例赏析 近期23个智慧路灯灯杆落地案例<b class='flag-5'>汇总</b>!

    C语言中最常见的宏定义写法

    如果让你用C语言写个宏定义,我相信大部分同学顺手就能写出define。
    的头像 发表于 10-28 11:12 239次阅读

    TMS320C6452功耗汇总

    电子发烧友网站提供《TMS320C6452功耗汇总.pdf》资料免费下载
    发表于 10-15 11:44 0次下载
    TMS320C6452功耗<b class='flag-5'>汇总</b>

    OMAP-L137功耗汇总

    电子发烧友网站提供《OMAP-L137功耗汇总.pdf》资料免费下载
    发表于 10-12 09:28 0次下载
    OMAP-L137功耗<b class='flag-5'>汇总</b>

    常见的服务器容器和漏洞类型汇总

    常见的服务器容器包括KubeSphere、Tomcat、Nginx、Apache等,它们在提供便捷的服务部署和灵活的网络功能的同时,也可能存在着一定的安全风险。这些容器的漏洞可能导致数据泄露、权限被非授权访问甚至系统被完全控制。具体的常见服务器容器漏洞包括解析漏洞、SSR
    的头像 发表于 08-29 10:39 212次阅读

    逆变器常见问题汇总#逆变电源

    逆变器
    深圳市宝威特电源有限公司
    发布于 :2024年06月26日 09:30:41

    SMT贴片常见不良现象分析汇总

    在我们加工制造产品的过程中,电路板贴片总会遇到一些问题,我们咨询了深圳佳金源工业科技有限公司的技术人员,对问题进行了整理汇总,便于大家学习了解。在SMT贴片生产过程中时有发生焊接不良现象,常见
    的头像 发表于 06-06 16:41 818次阅读
    SMT贴片<b class='flag-5'>常见</b>不良现象分析<b class='flag-5'>汇总</b>

    请问handle的写法

    遇到一行代码 YDLidar *laser = lidarCreate(); //Create a handle to this Lidar. 请问这行代码是什么意思,句柄的写法怎么是这样的呀
    发表于 05-18 10:42

    在官方库中发现GPIOx-&gt;ODR这种写法,是什么意思,怎么中间会有-&gt;?

    本人新手,刚接触st的芯片 在官方库中发现GPIOx->ODR这种写法,不知道这是什么意思,怎么中间会有->? 请论坛上高手予以帮忙解答
    发表于 05-10 06:48

    国产riscv芯片大汇总

    请问有统计国产的riscv芯片的吗?能汇总一下吗?
    发表于 04-27 11:53

    Cadence17.4使用问题汇总

    电子发烧友网站提供《Cadence17.4使用问题汇总.docx》资料免费下载
    发表于 03-07 16:33 2次下载

    常见的传感器技术汇总简介

    传感器技术是现代信息技术的关键组成部分之一,涉及到物理学、化学、生物学等多个学科领域,其应用范围广泛,包括工业自动化、环境监测、医疗保健、智能家居等领域。下面将介绍一些常见的传感器技术: 温度传感器
    的头像 发表于 01-12 14:05 1082次阅读

    PCB三防工艺缺陷问题汇总

    今天分享是《三防喷涂工艺缺陷问题案例汇总》 资料。
    的头像 发表于 12-29 10:10 968次阅读
    PCB三防工艺缺陷问题<b class='flag-5'>汇总</b>

    机械制图常见错误汇总

    今天分享是《机械制图常见错误》 资料。
    的头像 发表于 12-26 10:41 989次阅读
    机械制图<b class='flag-5'>常见</b>错误<b class='flag-5'>汇总</b>