实用炫酷!这样写Python代码四两拨千斤
作者:闲欢
来源:Python 技术
判断一个程序员水平的高低,不能光看他的发量,也不能光看他的代码量,还要看他代码蕴含的思想,代码的质量。代码蕴含的思想主要体现在各种设计模式的运用上,而代码的质量就既要实现需求,又要保证代码的简洁优雅。保证代码质量是需要长期积累,养成良好的编程习惯,不断思考优化的。
今天就给大家介绍一种实用的保证代码简洁的武功—— Python 推导四式。 什么是推导式
推导式 comprehensions(又称解析式),是 python 的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列。
看定义很抽象,下面我们来看看具体的例子,通过例子来学习这四种推导式。列表推导式
我们先来看一个需求:
快速创建一个包含元素1-9的平方的列表
面对这个需求,我们通常的实现方式是这样的:lis = [] for i in range(1, 10): lis.append(i*i) print(lis) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
用列表推导式怎么实现呢?你只需要一行代码:lis = [x * x for x in range(1, 10)] print(list) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
这就是推导式。我们可以看到列推导式的语法是这样的:
变量名 = [表达式 for 变量 in 列表]
再来一个复杂点的:list = [x * y for x in range(1, 10) for y in range(1, 10)] print(lis) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
这个是多个变量的类型,因此我们可以扩展上面的语法:
变量名 = [表达式 for 变量 in 列表 for 变量 in xxx]
当然,还有一种带条件的列推导式,它的语法是这样的:
变量名 = [表达式 for 变量 in 列表 if 条件]
我们来看一个需求:快速创建一个包含1-10之间所有偶数的列表。lis = [i for i in range(1, 11) if i % 2 == 0] print(lis) # [2, 4, 6, 8, 10] 字典推导式
字典推导式的形式和列表推导式类似,语法也是类似的,只不过字典推导式返回的结果是字典。
变量名 = {key: value表达式}
我们来看一个例子:dic = {x: x/2 for x in range(1,11) if x % 2 == 0} print(dic) # {2: 1.0, 4: 2.0, 6: 3.0, 8: 4.0, 10: 5.0}
如果这里我写成下面这种方式,返回的结果是什么呢?dic = {"half": x/2 for x in range(1,11) if x % 2 == 0} print(dic)
大家可以自己尝试运行一下,看跟你想的结果是不是一样的。集合推导式
看了前面两个推导式,想必你已经知道集合推导式怎么写了。语法如下:
变量名 = {表达式 for 变量 in 列表 for 变量 in xxx}
或者
变量名 = {表达式 for 变量 in 列表 if 条件}
来一个实际的例子:创建一个存储10个偶数的集合。set1 = {x for x in range(10) if x % 2 == 0} print(set1) # {0, 2, 4, 6, 8} 元组推导式
我们先来看一个例子:tup=(x for x in range(1,10)) print(tup) # at 0x1101fade0>
看到这个结果打印是不是有点懵?
上面的代码返回的变量其实是一个生成器,并不是一个元组。其实没有真正的元组推导式,我们只能用一个类似的方法来生成元组,暂且叫做"伪元组推导式"吧。
上面的例子我们来改进一下:tup=tuple(x for x in range(1,10)) print(tup) # (1, 2, 3, 4, 5, 6, 7, 8, 9)
在前面加上 tuple 来显式进行类型转换就行了。总结
这里介绍了四种 python 的推导式,主要是用来简化 循环的代码,生成不同的数据结构用的。当然,从这些基础的表达式语法出发,还可以运用到复杂的推导式,大家在写代码时留心使用就会发现它的强大之处。这种一行代码既简洁明了,又可以在新手面前炫技,用起来不要太爽!
iPhone13系列高清渲染图变化在细节之处废话不多说直接上图先,8张高清大图看清此次iPhone13的外观设计iPhone13miniiPhone13iPhone13ProiPhone13Promax的最大变化,后置摄像头
华为手表一代,至今仍然经典左华为手表一代右MOTO360一代华为手表一代的经典设计,我觉得至今没有任何手表可以超越。它是目前为止屏占比最高的全圆显示的智能手表,黑边非常小基本可以忽略,边框金属风格并略微高出
OPPOReno6系列昨日开售,夺得多平台销售双冠6月6日消息,OPPO此前在5月27日发布的OPPOReno6系列在昨日迎来了首次开售,此次开售的机型有OPPOReno6Pro与OPPOReno6Pro两款型号,而在首销当日,O
太阳能电池是如何将太阳能变成电能的?光伏发电技术是目前新能源技术领域里前景最广阔的技术之一,有效缓解全球能源危机和环境污染。由于太阳能不受地域限制,能源质量好清洁无污染取之不竭用之不尽以及一次投资长期受益等特点,加之
全球变暖气候变化如何影响地球随着全球变暖,季节变得越来越强烈了全球变暖不是一个笑话,特别是当它的现实以你无法逃避的热浪的形式冲击你的时候。了解全球变暖和气候变化对地球的影响,为我们提供了关于地球正在经历的大调
微信又迎来更新,但这一次确实有点让人无语微信性能管家上线据隔壁安卓消息,微信在近日推出了全新的安卓8。0。22版本,而这次版本更新可以说是让用户彻底懵逼。在安卓最新版微信中,微信居然给其加入了一个Matrix性能检测工具
美官员称选择华为意味着放弃主权赵立坚完全是无稽之谈中新网北京5月9日电(记者邢翀)中国外交部发言人赵立坚5月9日主持例行记者会。有记者提问近日美国常务副国务卿舍曼访问非洲期间称,当一些国家选择中国华为公司作为通信商时,就意味着放弃
美貌意味着基因优秀现在的社会好多都是以貌取人,美貌的人有很多的优势,不管是在外面还是在家里,美貌的人都是很受欢迎的,其实貌美的人不光只让人看着心悦,从科学的研究显示还能让后代的身体更加健康长寿。一项
墨子号实现1200公里地面站之间的量子态远程传输科技日报讯(记者吴长锋)6日,记者从中国科学技术大学获悉,该校潘建伟及其同事彭承志陈宇翱印娟等利用墨子号量子科学实验卫星首次实现了地球上相距1200公里两个地面站之间的量子态远程传
售后体验暖心升级三星推出全新线上手语服务5月9日,三星在国内正式推出了全新的线上手语服务,将售后服务在原有的语音在线AI三种沟通方式的基础上暖心升级。线上手语服务开通后,将减少听障用户在售后过程中可能遇到的沟通问题,并帮
力学TOP期刊等离子体改性UHMWPE纤维复合材料低速冲击性能研究导读超高分子量聚乙烯纤维(UHMWPE)增强复合材料类由于具备高抗剪切性,高比吸能等特点在抗弹道冲击防护领域前景广阔。主要以层合板形式应用,但纤维表面惰性导致层间分层和界面脱粘失效