写点什么

Python 推导式 pythonic 必备

  • 2020-03-04
  • 本文字数:1208 字

    阅读完需:约 4 分钟

Python推导式pythonic必备

编程规范

今天公司新出了一套 Python 编程规范 2.0,一直觉得自己写代码路子有点野,所以仔细的看了下。


多数的内容在网上都能搜到,但有几点需要说说


  • 让我觉得羞愧的注释率


公司要求代码注释行,占代码总行数的 20%,而我经常一套代码写下来注释寥寥几行。甚至在 Linux 下写代码的时候,由于系统语言包问题,pycharm 没办法打中文,经常出现通篇没有一行注释的情况…所谓,写自己的代码,让别人无处维护也就不过如此。但过了仗剑走天涯的年纪,要开始学着沉淀自己,不为别的,就为现在年轻的小伙子各个吃的好,长得壮。


  • 规避单一循环


这一点代码要求是我欣然接受的,我这人懒,能偷懒的偷懒,不能偷懒的想办法也要偷懒。这次的代码规范要求,单一辑的 for 循环,通过 Python 推导式完成,但嵌套 for 循环禁止使用。我默默的忽略后面这句,for 循环推荐 Python 推导式…


为什么喜欢推导式?因为省事儿、看这高端啊。最怕人说程序猿就是 if …else + for 循环了…

Python 推导式

今天就给大家介绍下 Python 推导式的使用


推导式(又称解析式) 是 Python 的一种独有特性。


推导式是可以从一个数据序列构建另一个新的数据序列的结构体。一共有三种推导:


  • 列表(list)推导式

  • 字典(dict)推导式

  • 集合(set)推导式


列表推导式 (list comprehensions)


列表推导式(又称列表解析式) 提供了一种简明扼要的方法来创建列表。


它的结构是在一个中括号里包含一个表达式, 然后是一个 for 语句, 然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的, 意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表, 在这个以 if 和 for 语句为上下文的表达式运行完成之后产生

规范

variable = [x for x in list if something == 2]
复制代码


这是另外一个简明例子:


multiples = [i for i in range(30) if i % 3 is 0]print(multiples)# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
复制代码


列表推导式在有些情况下超赞, 特别是当你需要使用 for 循环来生成一个新列表。举个例子, 通常一般人会这样做:


squared = []for x in range(10):    squared.append(x**2)
复制代码


你可以使用列表推导式来简化它:


squared = [x**2 for x in range(10)]
复制代码

集合推导式(set comprehensions)

至于集合推导式,跟列表推导式大同小异,不过在去重方面是 set 的强项


举个栗子:


squared = {x**2 for x in [1, 1, 2]}print(squared)# Output: {1, 4}
复制代码

字典推导式(dict comprehensions)

字典推导式,使用的场景比较少,但是有一点是超级赞的!


问题:遇到字典的键值对互换,你会怎么操作?


  1. 使用 for 循环?


mydict={"a":1,"b":2,"c":3}mydict_new={}for key,val in mydict.items():    mydict_new[val]=key
复制代码


  1. 使用 zip?


mydict={"a":1,"b":2,"c":3}newdict=dict(zip(mydict.values(),mydict.keys()))
复制代码


  1. say no,你应该使用字典推导式!


mydict={"a":1,"b":2,"c":3}newdict={v: k for k, v in some_dict.items()}ornewdict=dict([val,key] for key,val in mydict.items())
复制代码


2020-03-04 14:251053

评论

发布
暂无评论
发现更多内容

从困境到突破,EasyMR 集群迁移助力大数据底座信创国产化

袋鼠云数栈

集群架构 大数据存储 大数据计算与存储 大数据计算引擎 集群迁移

逻辑数据平台,多源异构实时数据高效同步的新途径

Aloudata

Data Fabric 数据编织 逻辑数据平台

IoTDB组件AI Node发布9个月,如何使用你了解了吗?

Apache IoTDB

言犀智能体平台上线了!赶紧来试试!连接大模型与企业应用的“最后一公里”

京东科技开发者

最新进展!Intel 18A产品,成功点亮!

E科讯

Prometheus Exporter 在观测云中的应用与优势

可观测技术

#Prometheus

Grafana 与观测云:无缝集成的监控可视化体验

可观测技术

数据可视化

观测云:多云架构下的监控革新与效能提升

可观测技术

监控 多云

文献解读-肿瘤测序-第二十七期|《敲减通过控制TOP2A下调的NUSAP1可以抑制人胶质母细胞瘤的细胞增殖和侵袭》

INSVAST

基因测序 基因数据分析 生信服务 肿瘤测序

SRE是新一代ITIL的革新者

雅菲奥朗

SRE ITIL SRE培训 SRE考试 SRE认证

低代码与软件定制开发的完美结合:生产管理软件的高效解决方案

天津汇柏科技有限公司

低代码 软件定制开发 生产管理软件

观测云:零售业数据监控与分析的革新者

可观测技术

监控 零售

碳视野|加快构建碳排放双控制度体系工作方案

AMT企源

数字化转型 碳中和 双碳 碳管理 碳核算

Supersonic 发行逻辑:从原型到爆款,健康增长循环助力开发者走向成功

极客天地

企业业务前端监控实践

京东科技开发者

ChatGPT 人工智能助理 Assistant

霍格沃兹测试开发学社

高并发场景下的库存管理,理论与实战能否兼得?

京东科技开发者

安全性和合规性:保障企业数据的安全

可观测技术

数据安全 数据合规

Python推导式pythonic必备_服务革新_华为云开发者联盟_InfoQ精选文章