交换变量值
Python中实现变量值的互换不需要设置临时变量
其原理是可以将任何序列,比如list、tuple,通过赋值来分解为单独的变量,例如上面等号右边的y, x就组成了一个tuple
我们也可以将x和y显式的组成一个list,进行交换
再赋值给y和x,这样可以完成变量值的交换
这种将序列进行分解的操作,有时候会有很多用处,例如将list中的元素赋值给x、y和z
压包与解包
压包和解包是Python中一个常用的功能
序列解包
在交换变量值小节中已经看到了序列解包的功能,除了将元素赋值给变量外,我们还可以*来分解任意数量的元素
用户信息中的姓名、用户编号和电话号码被解包出来了,其中号码可能有多个,通过*我们可以将任意多个,包括空的情况赋值给phones
通过这个功能,可以很方便的去掉最低和最高分后,来求平均值
函数中压包与解包参数
经常可以看到很多参数是以*args, **kwargs作为参数的函数,这样做就是利用了Python的压包与解包功能
*args的功能就是将传入的参数,例如1, 2, 3打包成一个tuple作为参数传入函数中,注意,这里的参数是不加关键字的,参数中需要加入关键字的,则需要加入**kwargs参数
**kwargs的作用是将关键字参数转为一个dict传入到函数中
这里,args和kwargs是可以换成其他名字,不过一般Python中约定俗成使用这两个变量名
如果将list直接作为参数传入,那么整个list会作为参数传入
可以在list参数前使用*进行解包,这时list中的每个元素会被解包,作为位置参数传入函数中
同样使用在dict参数前使用**,这时dict中的每个键值对会被解包,会作为关键字参数传入函数中
也可以传入多个list和dict,函数压包参数时会进行合并
下面举两个在format和zip函数中使用的例子
最大或者最小的N个元素
Python中使用max和min可以找到某个集合中最大或者最小的数
但是想找出最大或者最小的N个元素,可以使用heapq模块中的nlargest和nsmallest函数
如果经常对同一序列需要寻找最大或者最小的N个元素,考虑先将序列排序,这样做的话,效率会更高
领取专属 10元无门槛券
私享最新 技术干货