写点什么

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

评论

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

Security RememberMe原理分析

急需上岸的小谢

7月月更

关于Flink框架窗口(window)函数最全解析

百思不得小赵

大数据 flink window 7月月更

记一次面试

SkyFire

面试 操作系统 底层 基础知识

Modbus协议通信异常

神农写代码

瞧瞧人家用SpringBoot写的后端API接口,那叫一个优雅

程序知音

Java spring 编程 程序员 后端

性能测试如何创造业务价值

老张

性能测试 技术与业务

如何优雅的写 Controller 层代码?

程序知音

Java 编程 程序员 后端

hive数据导入:从查询数据导入

怀瑾握瑜的嘉与嘉

大数据 hive 7月月更

rxjs Observable 自定义 Operator 的开发技巧

Jerry Wang

typescript 响应式编程 angular RXJS 7月月更

远程办公对我们的各方面影响心得 | 社区征文

恒山其若陋兮

远程办公 初夏征文

相信自己,这次一把搞定JVM面试

慕枫技术笔记

JVM 7月月更

毕业总结

Dean.Zhang

Python|语言元素、分支结构和循环结构

AXYZdong

7月月更

深刻理解 Linux 进程间七大通信(IPC)

C++后台开发

网络编程 linux开发 Linux服务器开发 C++开发 进程通信

王者荣耀商城异地多活架构设计

Fan

架构实战营

RPA进阶(二)Uipath应用实践

No Silver Bullet

RPA 7月月更 Uipath

Mall电商实战项目全面升级!支持最新版SpringBoot,干掉循环依赖

程序知音

Java spring 编程 程序员 后端

【愚公系列】2022年07月 Go教学课程 001-Go语言前提简介

愚公搬代码

7月月更

【LeetCode】统计值等于子树平均值的节点数Java题解

Albert

LeetCode 7月月更

OpenHarmony如何启动远程设备的FA

坚果

HarmonyOS OpenHarmony 7月月更 harmony

好玩的免费GM游戏整理汇总

echeverra

游戏

微信小程序利用百度api达成植物识别

是乃德也是Ned

小程序开发 7月月更

使用BLoC 构建 Flutter的页面实例

岛上码农

flutter ios 安卓 移动端开发 7月月更

TCP拥塞控制详解 | 2. 背景

俞凡

算法 网络 TCP拥塞控制

JDBC

武师叔

7月月更

亚马逊云科技 Community Builder 申请窗口开启

亚马逊云科技 (Amazon Web Services)

build 亚马逊云

体验居家办公完成项目有感 | 社区征文

恒山其若陋兮

居家办公 初夏征文

关于我

不焦躁的程序员

旧的Spring Security OAuth已停止维护,全面拥抱最新解决方案

程序知音

Java spring 程序员 微服务 后端

JavaScript 设计模式之策略模式

devpoint

JavaScript 设计模式 策略模式 7月月更

Django 表单

海拥(haiyong.site)

django 7月月更

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