Python应用之多变量的灵活处理
我们都知道Python是一个非常灵活的语言,以至于如果它不是你的第一门语言,你会发现它总能给你各种各样的惊喜,让你忍不住惊叹:woc,还有这种操作。尤其我在系统地学习Python之前是Java后端出身,所以每一阶段几乎都会让我觉得打开了新世界的大门。今天就和大家介绍一个最基础,非常好用,但是很多人不知道的操作。
解压变量
我们都知道,Python允许进行多个变量的赋值操作,比如著名的交换两个元素,如果是在C++或者Java语言当中,如果不通过函数实现,必须要引入第三个变量,比如:
#swapa,b
c=a
a=b
b=c
我们要交换a和b必须要引入c,这是因为当我们赋值b给a的时候,a原本的值会丢失,所以我们必须要先”缓存“下来。但是由于Python支持多变量赋值的操作,所以大可不必引入其他变量就可以完成,所以交换两个元素在Python当中只有一行就可以搞定:
a,b=b,a
Python的解释器会直接计算后边的值然后覆盖左边,赋值是同时进行的,所以不需要引入其他变量,而且看起来也非常geek。
除此之外,Python还支持tuple和list的解压。
举个例子,假设我们有一个二元数组:[1,2],我们希望用两个变量分别获取它的第0位和第一位,我们当然可以写成这样:
l=[1,2]
a,b=l[0],l[1]
其实并不用这么麻烦,因为当Python检测到等号左边是多个变量,右边是list或者是tuple之后,会自动执行list和tuple的解压,将它依次赋值给对应的元素,所以上面的代码可以简化成:
l=[1,2]
a,b=l
那如果l是一个二维数组,我们希望遍历它呢?同样可以在循环当中使用:
l=[[1,2],[3,4],[5,6]]
fori,jinl:
print(i,j)
即使是在变量的组合当中也可以生效:
a,b,c=1,3,(4,5)
print(c)
当我们执行这段代码,屏幕上会输出什么呢?是会报错吗?还是会解压(4,5)这个tuple然后将4赋值给c呢?
都不对,输出的结果是(4,5),也就是说Python发现变量数量对不上之后,会自动将tuple当做一个整体进行赋值。不但如此,即使是下面这种情况,Python也能自动识别:
a,b,(c,d),e=1,3,(4,5),7
print(c,d)
在上面的赋值当中,既有tuple又有普通元素,并且我们的变量也组合成了tuple,这时Python同样会识别出(4,5)应该赋值给(c,d)这个整体,也就是说4和5分别赋值给c和d。
缺省元素
在有的时候,我们在获取元素的时候,源数据当中有我们不需要的字段。虽然Python自动解压非常方便,但是我们还是要为我们不需要的数据设置变量。在一些情况下这会导致内存的浪费,并且这也不符合我们编程的规范,即所有变量都应该派上用场。为了解决这个问题,Python提供缺省元素的方法。我们可以使用_来代表一个缺省值,_对应的数据不会被存储下来,只是为了方便我们”凑齐“元素。
举个例子,还用上面的例子举例,假设源数据的格式是这样:1,3,(4,5),7,但是我们只需要中间的元组,我们就可以这样去接收:
_,_,(c,d),_=1,3,(4,5),7
再比如,当我们遍历dict的时候,有可能我们并不关注dict的key,只希望获得它的value,这个时候也可以使用缺省符号:
a={}
for_,vina.items():
print(v)
压缩变量
既然变量可以解压,那么自然也可以压缩。想象一个场景,比如有一批衡量工厂零件的数据,这个数据当中除了零件的尺寸之外还包含了零件的名称,生产日期和工厂名称等等其他的属性。假设我们当下希望解析这份数据,并且将零件的尺寸用数组存储,这个时候应该怎么办呢?
比如,零件的数据的规格长这样:wheel,factory1,3,4,5,6,2020-02-02
Python同样针对这个问题提供了解决方法,就是变量压缩符*,针对上面那个问题,我们可以写成:
data=['wheel','factory1',3,4,5,6,'2020-02-02']
name,factory,*inch,date=data
print(inch)
最后我们打印出来的inch是[3,4,5,6],也就是说通过使用*,我们成功地将中间表示零件尺寸的数据赋值进了一个数组当中。这个操作非常重要,因为有可能不同零件尺寸的数量是不同的,如果我们自己写解析的话就很难处理这个问题。而使用Python当中的*操作符,我们可以很好地解决这个问题。
联合使用
到这里,我们介绍了缺省符号的用法,介绍了压缩符号的用法,问题来了,我们能不能将这两个符号组合使用,获取数据当中任意个缺省值呢?
当然是可以的,还是刚才的问题,假设我们现在不关心零件的尺寸,想要过滤掉它们,我们只要对上面的代码稍作改动即可:
data=['wheel','factory1',3,4,5,6,'2020-02-02']
name,factory,*_,date=data
如此我们就过滤掉了中间若干个尺寸信息,仅仅保留了头尾其他的信息。
其他用途
到这里还没结束,不知道大家在看到*这个操作符号的时候有没有什么联想,如果稍稍了解过Python的话,应该会想起Python当中,如果我们想让一个函数接收任何参数的话,我们可以写成:
deffunc(*args,**kw):
pass
其中args其实代表一个数组,kw代表一个dict,这些我们都是知道的。但是前面的*和**呢,又代表什么呢?
代表解压数组,*自然就代表解压dict。我们来看个例子:
a=[1,3,5]
print(a)
print(*a)
以上内容为大家介绍了Python应用之多变量的灵活处理,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
相关推荐HOT
更多>>Ppython await是什么?
await的解释:await用来声明程序挂起。比如异步程序执行到某一步时需要等待的时间很长,就将此挂起,去执行其他的异步程序。await后面只能跟异...详情>>
2023-11-06 20:47:43Python企业应用的优缺点
Python是软件开发领域一朵诱人的奇葩:人们经常把Python看作是一种起到缝合作用的严格脚本语言,不过却很少有人意识到Python已经足够强大到应用...详情>>
2023-11-06 18:04:55Python自定义模块导入方法
Python模块是一个Python文件,以.py结尾,包括了Python对象定义和Python语句,能让Python代码段更有逻辑性、更好用、更易懂,既然Python模块有...详情>>
2023-11-06 12:51:53Python中yield的用法详解
首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参...详情>>
2023-11-06 11:43:31