实用炫酷!这样写Python代码四两拨千斤!

文 | 闲欢\

来源:Python 技术「ID: pythonall」

判断一个程序员水平的高低,不能光看他的发量,也不能光看他的代码量,还要看他代码蕴含的思想,代码的质量。代码蕴含的思想主要体现在各种设计模式的运用上,而代码的质量就既要实现需求,又要保证代码的简洁优雅。保证代码质量是需要长期积累,养成良好的编程习惯,不断思考优化的。

今天就给大家介绍一种实用的保证代码简洁的武功—— Python 推导四式。

什么是推导式

推导式 comprehensions(又称解析式),是 python 的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列。

看定义很抽象,下面我们来看看具体的例子,通过例子来学习这四种推导式。

列表推导式

我们先来看一个需求:

快速创建一个包含元素1-9的平方的列表

面对这个需求,我们通常的实现方式是这样的:

lis = []
for i in range(110):
    lis.append(i*i)
print(lis) # [149162536496481]
复制代码

用列表推导式怎么实现呢?你只需要一行代码:

lis = [x * x for x in range(110)]
print(list) # [149162536496481]
复制代码

这就是推导式。我们可以看到列推导式的语法是这样的:

变量名 = [表达式 for 变量 in 列表]

再来一个复杂点的:

list = [x * y for x in range(110for y in range(110)]
print(lis)
# [1234567892468101214161836912151821242748121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281]
复制代码

这个是多个变量的类型,因此我们可以扩展上面的语法:

变量名 = [表达式 for 变量 in 列表 for 变量 in  xxx]

当然,还有一种带条件的列推导式,它的语法是这样的:

变量名 = [表达式 for 变量 in 列表 if 条件]

我们来看一个需求:快速创建一个包含1-10之间所有偶数的列表。

lis = [i for i in range(111if i % 2 == 0]
print(lis) # [246810]
复制代码

字典推导式

字典推导式的形式和列表推导式类似,语法也是类似的,只不过字典推导式返回的结果是字典。

变量名 = {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(10if x % 2 == 0}
print(set1) # {02468}
复制代码

元组推导式

我们先来看一个例子:

tup=(x for x in range(1,10))
print(tup) # <generator object <genexpr> at 0x1101fade0>
复制代码

看到这个结果打印是不是有点懵?

上面的代码返回的变量其实是一个生成器,并不是一个元组。其实没有真正的元组推导式,我们只能用一个类似的方法来生成元组,暂且叫做“伪元组推导式”吧。

上面的例子我们来改进一下:

tup=tuple(x for x in range(1,10))
print(tup) # (123456789)
复制代码

在前面加上 tuple 来显式进行类型转换就行了。

总结

这里介绍了四种 python 的推导式,主要是用来简化 循环的代码,生成不同的数据结构用的。当然,从这些基础的表达式语法出发,还可以运用到复杂的推导式,大家在写代码时留心使用就会发现它的强大之处。这种一行代码既简洁明了,又可以在新手面前炫技,用起来不要太爽!

PS: 公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

代码获取方式****】

识别文末二维码,回复:210416

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享