QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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:25931

评论

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

Kube-OVN v 0.7.0 发布,IPAM、子网和安全功能增强

York

灵雀云 Kubernetes k8s Kube-OVN

架构师训练营技术知识点

三板斧

架构师训练营第 1 期

同城快递系统-大作业

三板斧

极客时间架构师一期

剖析JDK:强引用、软引用、弱引用、虚引用有何区别?

后台技术汇

28天写作

电商后链路如何做好私域运营?

Linkflow

客户数据平台 CDP 客户画像

灵雀云Kube-OVN:基于OVN的开源Kubernetes网络实践

York

灵雀云 Kubernetes k8s Kube-OVN

再谈自研开源Kube-OVN, 设计思路及实现原理

York

灵雀云 Kubernetes k8s Kube-OVN

“持证”就能上岗 京东绿色内推招聘通道开启

京东科技开发者

云计算 大数据 程序人生

教小师妹快速入门Maven,嘿嘿嘿...

田维常

maven

代码整洁之道

田维常

代码

容器网络方案调研:都是网络插件,Kube-OVN凭啥脱颖而出?

York

灵雀云 Kubernetes k8s Kube-OVN

Kube-OVN 0.5.0 发布,支持 NetworkPolicy、用户自定义网卡和MTU

York

灵雀云 Kubernetes k8s Kube-OVN

Python进阶系列文章汇总

Kaito

Python 爬虫

Kube-OVN 0.6.0 发布,支持 IPv6、流量镜像及更多功能

York

灵雀云 Kubernetes k8s Kube-OVN

OVS 设计与实现阅读笔记,五年前的这篇论文里这些问题已经明了

York

Kubernetes k8s Kube-OVN

2021年的28天写作,从微信视频号开始

赵新龙

法庭上的CTO 28天写作

“58同城”架构师分享:联盟广告平台架构及实践

Java架构师迁哥

Kube-OVN再更新! v0.8.0 支持网关高可用以及网络监控集成

York

灵雀云 Kubernetes k8s Kube-OVN

一份阿里Java学习路线出现“病毒式”传播,导致44人秋招同时拿到offer

Java架构师迁哥

技术实录 | 灵雀云基于 OVN 的 Kubernetes 网络架构解析

York

灵雀云 Kubernetes k8s Kube-OVN

SpringCloud从入门到精通02---支付模块01

Felix

大作业一:架构设计方案评审

Nick~毓

软件测试--缺陷报告

测试人生路

软件测试

灵雀云开源项目 Kube-OVN 亮相开源基础设施峰会

York

灵雀云 Kubernetes k8s Kube-OVN

一个20年技术老兵的 2020 年度技术总结

万俊峰Kevin

微服务 go-zero Go 语言

SpringCloud从入门到精通01---父项目创建

Felix

SpringCloud Eureka 高可用架构

Yarn RM写ZNode超数据量限制bug修复

kwang

大数据 zookeeper YARN

Kube-OVN v0.9.0更新,网络可视化和控制平面稳定性提升

York

灵雀云 Kubernetes k8s Kube-OVN

中国特色新基建可视化,工程监控画面还能这么美?你绝对没见过

一只数据鲸鱼

物联网 新基建 数据可视化 绿色工业

2021年阿里巴巴面试参考指南泰山版开源(Java版)

Java架构追梦

Java 架构 面试 分布式 微服务

腾讯大佬亲自总结出“Java知识地图+学习路线”从点到面一应俱全!不看血亏

比伯

Java 编程 架构 程序人生 计算机

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