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/

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

    关注

    90

    文章

    3723

    浏览量

    97439
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

    90307

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MLCC常见问题--快速应对

    MLCC常见分类,温度常常被问到啥是一类、二类陶瓷?这个温度多少?以下最常用MLCC代码参考~一类(非铁电氧化钛体系)一类MLCC相对比较少温度-55到125℃二类(铁电钛酸钡体系)二类MLCC常见
    的头像 发表于 03-24 16:27 161次阅读
    MLCC<b class='flag-5'>常见</b>问题--快速应对

    汇总整理:MWC2026关键信息

    2026年3月2日至5日,世界移动通信大会(MWC)在西班牙巴塞罗那拉开帷幕。展会规模很大,参展企业也很多,各类新闻非常混乱。为了方便大家快速了解展会情况,小枣君把各大展商的主要发布内容做了一个汇总
    的头像 发表于 03-04 17:23 920次阅读
    <b class='flag-5'>汇总</b>整理:MWC2026关键信息

    三防漆的常见问题汇总

    应力保护。然而,在实际应用过程中,工程师和技术人员常常会遇到各种与三防漆自身性能或施工工艺相关的问题。本文以问答形式汇总了10个常见问题,并结合行业标准、材料特性
    的头像 发表于 02-07 16:43 498次阅读
    三防漆的<b class='flag-5'>常见</b>问题<b class='flag-5'>汇总</b>

    汇总开关电源调试的常见问题

    开关电源作为现代电子设备的核心部件,其稳定性和可靠性直接影响整体系统的性能。然而,在调试过程中,工程师常会遇到各种问题,导致电源无法正常工作或性能不达标。本文将系统梳理开关电源调试中的常见问题及其
    的头像 发表于 02-06 12:05 814次阅读
    <b class='flag-5'>汇总</b>开关电源调试的<b class='flag-5'>常见</b>问题

    UV胶的常见问题汇总

    Q1:UV胶是什么,它是如何固化的UV胶,即紫外光固化胶,是一种在紫外线照射下发生光化学反应而固化的胶粘剂。其内部含有光引发剂,当受到特定波长的紫外光(通常为365nm或395nm)照射时,光引发剂吸收光能并分解产生活性自由基或阳离子,进而引发树脂单体交联聚合,形成三维网络结构,实现从液态到固态的转变。Q2:UV胶需要多久才能完全固化固化时间取决于UV胶的类
    的头像 发表于 02-02 15:35 1063次阅读
    UV胶的<b class='flag-5'>常见</b>问题<b class='flag-5'>汇总</b>

    导热凝胶的常见问题汇总

    Q1:导热凝胶是什么?A1:导热凝胶是一种以有机硅或改性硅树脂为基体,填充高导热无机填料(如氧化铝、氮化硼等)制成的热界面材料。其初始为膏状或半流体,可点胶施工,固化后形成柔软弹性体,用于填充发热器件与散热结构之间的微小间隙,提升热传导效率。Q2:导热凝胶和导热硅脂有什么区别?A2:主要区别在于物理形态和长期稳定性。导热硅脂为非固化材料,长期使用可能干裂、渗
    的头像 发表于 01-30 16:25 420次阅读
    导热凝胶的<b class='flag-5'>常见</b>问题<b class='flag-5'>汇总</b>

    全面汇总电磁流量计常见故障及处理方法

    电磁流量计的稳定性直接影响工业流量测量的生产效率,实际运行中常因环境干扰、安装不当或部件老化引发故障。本文将系统梳理HSD系列电磁流量计常见故障及处理方法,助您快速定位问题并高效解决。 电磁流量计
    的头像 发表于 11-03 09:58 1063次阅读

    常见的电子元器件失效分析汇总

    电子元器件失效可能导致电路功能异常,甚至整机损毁,耗费大量调试时间。部分半导体器件存在外表完好但性能劣化的“软失效”,进一步增加了问题定位的难度。电阻器失效1.开路失效:最常见故障。由过电流冲击导致
    的头像 发表于 10-17 17:38 1428次阅读
    <b class='flag-5'>常见</b>的电子元器件失效分析<b class='flag-5'>汇总</b>

    2025北京软件开发公司推荐汇总:盘点10家优秀软件定制开发公司

    2025北京软件开发公司推荐汇总:盘点10家优秀软件定制开发公司
    的头像 发表于 09-30 09:16 2946次阅读
    2025北京软件开发公司推荐<b class='flag-5'>汇总</b>:盘点10家优秀软件定制开发公司

    常见的物联网连接方式有哪些?

    常见的物联网连接方式
    发表于 09-08 08:26

    干货分享 | 功能安全常见疑难问题汇总

    安全干货SafetyQ&A“功能安全常见疑难问题解答”在智能驾驶及新能源汽车的飞速发展之下,功能安全已成为绕不开的关键领域。然而在实际应用中,一直面临着诸多问题和挑战。前不久,磐时举办了一场
    的头像 发表于 09-05 16:21 2484次阅读
    干货分享 | 功能安全<b class='flag-5'>常见</b>疑难问题<b class='flag-5'>汇总</b>

    工业物联网常见的协议有哪些

    工业物联网常见的协议有哪些
    的头像 发表于 06-14 15:52 1448次阅读

    便携式经济型万用表常见疑问汇总

    上,与 SYN5684 系列相近,能够为用户提供精准的测量结果。而且,其智能算法还能对测量数据进行实时校准和优化,进一步提升测量的可靠性。​ (二)测量功能丰富吗?​ 这两款万用表的测量功能十分丰富。除了常见
    发表于 06-12 16:37

    半导体人必懂的50个‘黑话’:从光刻到封装,一文解锁行业暗号!

    以下是半导体工艺行业中常见的“黑话”(行业术语)汇总,涵盖晶圆制造、封装测试、设备材料等环节,帮助快速理解行业交流中的专业术语:
    的头像 发表于 06-03 11:26 1.2w次阅读
    半导体人必懂的50个‘黑话’:从光刻到封装,一文解锁行业暗号!

    电机选型计算公式与知识点汇总

    纯分享帖,需要者可点击附件获取完整资料~~~*附件:电机选型计算公式与知识点汇总.pdf 【免责声明】内容转自今日电机,因转载众多,无法确认真正原始作者,故仅标明转载来源。版权归原出处所有,纯分享帖,侵权请联系删除内容以保证您的权益。
    发表于 04-29 16:10